Binärdatei schreiben und lesen
-
Was jedenfalls in's Auge springt ist, dass Du
d.c_str()wegschreibst und in&bliest. Was macht denn Zeile 34 eigentlich?
-
Furble Wurble schrieb:
Was jedenfalls in's Auge springt ist, dass Du
d.c_str()wegschreibst und in&bliest. Was macht denn Zeile 34 eigentlich?Ja Zeile 34 war so n test. Hätt ich vielleicht noch wegmachen sollen. Und &b wollte ich absichtlich lesen.
Naja ich hab es jetzt anders gemacht. Das auslesen sieht bei mir nun so aus:ifstream lesen; lesen.open("/cygdrive/c/bla.txt", ios::in|ios::binary); if(!lesen){ cerr << "Datei existiert nicht"; exit(-3); } lesen.read((char*)&size2,sizeof(int)); // größe wird zuerst ausgelesen damit sie bekannt ist char wort[size2]; lesen.read(wort, size2); for(int i = 0; i< size2; i++){ b += wort[i]; }Und endlich funktioniert es!
Den Code zum einlesen hab ich gelassen. MIch wundert nur eins: Die Daten die "Binär" auf die Datei geschrieben sind, sind trotzdem lesbar. Müssten da nicht irgendwelche kryptischen zeichen stehen oder ist das normal?
-
Hmm, da war ich wohl etwas sparsam...
Du kannst direkt in den String lesen. Nur musst Du Deine Daten halt dahin schreiben, wo der String seine Daten hält. Und dieser Puffer muss auch groß genug sein:
lesen.read((char*)&size , sizeof(int)); b.resize(size); // Platz schaffen lesen.read(&b[0], size); // Du siehst den Unterschied zu Deinem Code.
-
Das mit den Binärdaten ist normal.
ios::binarybedeutet einfach, dass Zeilenumbrüche nicht konvertiert werden sollen. Der eigentliche Unterschied zwischen binär und formatiert liegt in der Ausgabemethode.ofstream::writeschreibt die Daten so wie sie sind raus, im Falle von strings ASCII/UTF8, je nach Zeichensatz oder beiints eben die 4/8 Bytes. Der<<-Operator schreibtstringauch als ASCII/UTF8 raus,ints allerdings auch in lesbarer Form alsstring.