problem mit struct in datei schreiben
-
Hallo!
wenn ich aus einer existierenden datei eine struct laden will, steht nicht das richtige drinnen! aber wird die datei zur laufzeit des programmes geschreiben und dann gelesen, klappt es!? an was liegt das?struct Artikel { std::string name; int zeilen; int jahr; }; struct Thema { int count; // anzahl der artikel zum thema std::vector<Artikel> artikel }; void lesen(const std::string& file) { std::fstream f; Thema tmp; f.open( file.c_str() , std::ios::in | std::ios::binary ); if ( f.is_open() ) { f.read( (char*)&tmp, sizeof( tmp ) ); } f.close(); // ausgabe (...) } void schreiben( (...) ) { std::fstream file; Thema thema; //thema füllen (...) file.open("test1.dat", std::ios::out|std::ios::binary); if (file.is_open()) file.write((const char*)&thema,sizeof(thema)); file.close(); }
-
SO geht das nicht.
Dein Problem ist, das in beiden Structs jeweils Variable grössen herrschen.
Sie bestehen nicht aus reinen atomaren Werten. Somit kannst
du sie _nicht_ auf einen schwung binär in eine Datei schreiben .(!)wenn du einen String speichern willst, solltest du erst die größe des
Strings speichern, dann den String schreiben. Beim Auslesen, zahl auslesen,
und dann mit Read die anzahl der Bytes in den String schreiben.Bei Vector ist es fast das selbe, erst die Anzahl der Elemente im Vector
in die Datei schreiben, und dann die einzelnen Elemente hinein schreiben,
auslesen wieder -> Anzahl auslesen, mit schleife elemente auslesen.evtl. schaust du dir mal die Operatoren >>,<< an, damit kann man solche dinge
elegant lösen.Devil
-
http://www.c-plusplus.net/oop_dummies/kap24-reste.pdf
aus
Objektorientierte Programmierung für Dummies | ISBN: 3826629841
-
danke klappt bestens!