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).


Anmelden zum Antworten