Wie schreibt man std::string in eine Datei?

Lesezeit: 3 Minuten

Wie schreibt man stdstring in eine Datei
Slashr

Ich möchte eine schreiben std::string Variable, die ich vom Benutzer in eine Datei akzeptiere. Ich habe versucht, die zu verwenden write() Methode und schreibt in die Datei. Aber wenn ich die Datei öffne, sehe ich Kästchen anstelle der Zeichenfolge.

Die Zeichenfolge ist nur ein einzelnes Wort variabler Länge. Ist std::string dafür geeignet oder sollte ich ein Zeichenarray oder so etwas verwenden.

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();`
}

  • Bitte zeigen Sie Ihren Code. Im Allgemeinen, wenn richtig verwendet, std::string ist dafür in Ordnung.

    – Nutzlos

    13. März 2013 um 14:27 Uhr

  • Sie müssen den ‘Payload’ CONTENT der Zeichenfolge speichern, nicht das Zeichenfolgenobjekt als solches (das normalerweise nur eine Länge und einen Zeiger auf den tatsächlichen Inhalt enthält).

    – Mats Petersson

    13. März 2013 um 14:28 Uhr

1646265005 355 Wie schreibt man stdstring in eine Datei
JSQuareD

Sie schreiben gerade die Binärdaten in die string-Objekt zu Ihrer Datei. Diese binären Daten bestehen wahrscheinlich nur aus einem Zeiger auf die tatsächlichen Daten und einer Ganzzahl, die die Länge der Zeichenfolge darstellt.

Wenn Sie in eine Textdatei schreiben möchten, ist dies wahrscheinlich am besten mit einer ofstream, ein “Out-File-Stream”. Es verhält sich genau so std::coutaber die Ausgabe wird in eine Datei geschrieben.

Das folgende Beispiel liest eine Zeichenfolge aus stdin und schreibt diese Zeichenfolge dann in die Datei 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;
}

Beachten Sie, dass out.close() ist hier nicht unbedingt notwendig: der Dekonstruktor von ofstream können dies schnellstmöglich für uns erledigen out geht aus dem Rahmen.

Weitere Informationen finden Sie in der C++-Referenz: http://cplusplus.com/reference/fstream/ofstream/ofstream/

Wenn Sie nun in eine Datei in Binärform schreiben müssen, sollten Sie dies mit den tatsächlichen Daten in der Zeichenfolge tun. Der einfachste Weg, diese Daten zu erfassen, wäre die Verwendung von string::c_str(). Sie könnten also verwenden:

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

  • Ich musste std::ios::binary hinzufügen, um keine Probleme mit Zeilenumbrüchen zu haben

    – Watschelt

    31. Oktober 2016 um 0:41 Uhr

  • out.close() ? zweimal? falsche Antwort

    – caoanan

    29. Dezember 2021 um 10:17 Uhr

  • @caoanan es soll die API demonstrieren. Ich erwähne auch im Text des Körpers, dass es automatisch passiert, wenn die Variable den Gültigkeitsbereich verlässt. Jedenfalls, close() ist idempotent, also kann es nicht schaden, wenn es mehrmals aufgerufen wird.

    – JSQuareD

    8. Januar um 18:46 Uhr

1646265006 724 Wie schreibt man stdstring in eine Datei
Stefan

Angenommen, Sie verwenden a std::ofstream Um in eine Datei zu schreiben, schreibt das folgende Snippet a std::string in menschenlesbarer Form ablegen:

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

entferne das ios::binary aus Ihren Modi in Ihrem ofstream und verwenden studentPassword.c_str() anstatt (char *)&studentPassword in deiner write.write()

917420cookie-checkWie schreibt man std::string in eine Datei?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy