कैसे लिखें std :: string to file?


86

मैं एक std::stringचर लिखना चाहता हूं जिसे मैं उपयोगकर्ता से फ़ाइल में स्वीकार कर रहा हूं। मैंने write()विधि का उपयोग करने की कोशिश की और यह फ़ाइल को लिखता है। लेकिन जब मैं फ़ाइल खोलता हूं तो मुझे स्ट्रिंग के बजाय बक्से दिखाई देते हैं।

स्ट्रिंग केवल एक चर लंबाई एकल शब्द है। इसके std::stringलिए उपयुक्त है या मुझे चरित्र सरणी या कुछ और का उपयोग करना चाहिए।

ofstream write;
std::string studentName, roll, studentPassword, filename;


public:

void studentRegister()
{
    cout<<"Enter roll number"<<endl;
    cin>>roll;
    cout<<"Enter your name"<<endl;
    cin>>studentName;
    cout<<"Enter password"<<endl;
    cin>>studentPassword;


    filename = roll + ".txt";
    write.open(filename.c_str(), ios::out | ios::binary);

    write.put(ch);
    write.seekp(3, ios::beg);

    write.write((char *)&studentPassword, sizeof(std::string));
    write.close();`
}

3
कृपया अपना कोड दिखाएं। सामान्य तौर पर, अगर सही तरीके से उपयोग किया जाता है , तो इसके std::stringलिए ठीक है।
बेकार

2
आपको स्ट्रिंग के 'पेलोड' कंटेंट को बचाने की जरूरत है, न कि स्ट्रिंग ऑब्जेक्ट को इस तरह (जिसमें आमतौर पर सिर्फ एक लंबाई और वास्तविक सामग्री के लिए एक पॉइंटर होता है)
मैट पीटरसन

जवाबों:


120

आप वर्तमान में stringअपनी फ़ाइल में -object में बाइनरी डेटा लिख ​​रहे हैं । यह बाइनरी डेटा संभवतः वास्तविक डेटा के लिए केवल एक पॉइंटर से बना होगा, और एक पूर्णांक स्ट्रिंग की लंबाई का प्रतिनिधित्व करेगा।

यदि आप एक टेक्स्ट फ़ाइल में लिखना चाहते हैं, तो ऐसा करने का सबसे अच्छा तरीका संभवतः ofstreamएक "आउट-फाइल-स्ट्रीम" होगा। यह बिल्कुल वैसा ही व्यवहार करता है std::cout, लेकिन आउटपुट किसी फ़ाइल में लिखा होता है।

निम्न उदाहरण स्टड से एक स्ट्रिंग पढ़ता है, और फिर इस स्ट्रिंग को फ़ाइल में लिखता है output.txt

#include <fstream>
#include <string>
#include <iostream>

int main()
{
    std::string input;
    std::cin >> input;
    std::ofstream out("output.txt");
    out << input;
    out.close();
    return 0;
}

ध्यान दें कि out.close()यहां कड़ाई से काम नहीं किया जा रहा है: ofstreamजैसे ही outगुंजाइश से बाहर निकलता है डिकंस्ट्रक्टर हमारे लिए इसे संभाल सकता है ।

अधिक जानकारी के लिए, C ++ - संदर्भ देखें: http://cplusplus.com/reference/fstream/ofstream/ofstream/

अब अगर आपको किसी फाइल को बाइनरी फॉर्म में लिखने की आवश्यकता है, तो आपको स्ट्रिंग में वास्तविक डेटा का उपयोग करके ऐसा करना चाहिए। इस डेटा को हासिल करने का सबसे आसान तरीका होगा string::c_str()। तो आप उपयोग कर सकते हैं:

write.write( studentPassword.c_str(), sizeof(char)*studentPassword.size() );

3
मुझे std जोड़ना पड़ा :: ios :: newline वर्णों के साथ समस्या न हो इसके लिए बाइनरी:
Waddles

19

मान लें कि आप std::ofstreamफ़ाइल में लिखने के लिए उपयोग कर रहे हैं , निम्नलिखित स्निपेट std::stringमानव पठनीय रूप में फाइल करने के लिए लिखेंगे :

std::ofstream file("filename");
std::string my_string = "Hello text in file\n";
file << my_string;

0

ios::binaryअपने इनस्ट्रीम से अपने इनस्ट्रीम को हटा दें और अपने के studentPassword.c_str()बजाय उपयोग (char *)&studentPasswordकरेंwrite.write()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.