Hilfe! ifstream.read() liefert fälschlich EOF
-
Hi,
ich habe einen wirklich strangen Fehler: Ich will aus einer Datei run 50.000 daten (short int) auslesen.
short int s; for (int j=0; j<50000; ++j) {ifs.read((char*)&s, (sizeof(short int))); cout << j << " " << s << endl; cout << ifs.eof() << " " << ifs.fail() << " "; cout << ifs.good()<< " " << ifs.bad() << endl; }Klappt bei den ersten 50, aber dann findet der stream ein EOF und hört auf. Aber da ist kein EOF!!! Da stehen wirklich 50.000 Daten drin. Hab mit einem Hex-editor nachgeschaut. Außerdem: Dasselbe Programm funktioniert mit derselben Datei unter Linux tadellos! Woran könnte das liegen? Und was soll ich tun? Gibt es andere Möglichkeiten Daten einzulesen? Dieses ganze mmio-Zeugs?
Viele Grüße
-
Dieser Thread wurde von Moderator/in estartu_de aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hast Du die Datei auch binär geöffnet? (hmm... auch wenn das read nicht sonderlich jucken sollte)
-
7H3 N4C3R schrieb:
Hast Du die Datei auch binär geöffnet? (hmm... auch wenn das read nicht sonderlich jucken sollte)
Hallo 7H3 N4C3R,
danke für diesen einfachen, aber genialen Tip. Daran lags wirklich
Einfach ios::binary beim Konstruktor angegeben ... und schon flutscht es. Also Danke nochmal.
Wie gesagt, unter Linux hab ich das ios::binary seit Jahren immer weggelassen, aber da hat es nicht zu so etwas geführt. Werde es jetzt immer richtig machen
Viele Grüße!
-
Könnte mit der unteschiedlichen Behandlung von Textdateien unter Windows und Linux zusammenhängen (genauer, mit dem Zeilenwechsel: C-intern '\n', Linux '\n', Windows '\r\n' (und Mac '\n\r')) - der wird im Textmodus beim Lesen/Schreiben je nach Betriebssystem umgerechnet (und zerlegt dann eventuell deine Binärdarstellung).