2013-03-13 20 views
43

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

Die Zeichenfolge ist nur ein einzelnes Wort variabler Länge. Ist std::string dafür geeignet oder soll ich ein Character-Array oder sowas benutzen.

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

Bitte zeigen Sie Ihren Code. Im Allgemeinen, _if_ korrekt verwendet, ist 'std :: string' in Ordnung dafür. – Useless

+1

Sie müssen die 'Payload' CONTENT der Zeichenfolge speichern, nicht das String-Objekt als solches (das in der Regel nur eine Länge und einen Zeiger auf den tatsächlichen Inhalt enthält) –

Antwort

61

Sie schreiben zur Zeit die Binärdaten in der string -object zu Ihrer Datei. Diese Binärdaten 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 der beste Weg dies wahrscheinlich mit einem ofstream, einem "Out-File-Stream". Es verhält sich genau wie std::cout, aber 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() hier nicht unbedingt notwendig ist: die Deconstructor von ofstream dies für uns verarbeiten kann, sobald out den Gültigkeitsbereich verlässt.

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

Nun, wenn Sie auf eine Datei in binärer Form schreiben müssen, sollten Sie dies tun, die eigentlichen Daten in der Zeichenfolge verwendet wird. Der einfachste Weg, diese Daten zu erfassen, wäre string::c_str(). So könnten Sie verwenden:

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

Ich musste dafür std :: ios :: binary hinzufügen keine Probleme mit Newline-Zeichen – Waddles

9

Vorausgesetzt Sie haben eine std::ofstream verwenden Datei zu schreiben, das folgende Snippet wird eine std::string schreiben in für Menschen lesbaren Form in Datei:

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

die ios::binary entfernen von Ihrem Modi in Ihrem ofstream und verwenden Sie studentPassword.c_str() anstelle von (char *)&studentPassword in Ihrem write.write()

Verwandte Themen