ifstream Problem



  • Habe ein kurioses Problem mit ifstream:

    Ich möchte gerne über

    unsigned char Bytes;
    ifstream f(c:\\test.grf, ios::binary||ios::out)
    while (f)
    f>>Bytes;
    f.close();

    mehrere Bytes aus einer Datei auslesen.
    Aber leider überspringt die Funktion beim einlesen manchmal ein Byte.
    Mit f.read.... funktioniert alles bestens, warum aber nicht mit dem Ausgabe-
    operator f>>Byte ?

    Weiss jemand vielleicht weiter ?
    DANKE



  • kann es sein das die bytes die er überspringt leerzeichen sind?



  • ifstream f(c:\\test.grf, ios::binary||ios:out)

    Also das sollte wohl eher:

    ifstream f("c:\\test.grf", ios::binary|ios:in)
    

    heißen. Schließlich ist out und ifstream ein Widerspruch.

    Und dann:
    Du kannst mit dem op>> nicht arbeiten, wenn du die Datei mit ios::binary geöffnet hast. Der op>> arbeitet im *Textmode*. Er dient dazu bestimmte Formatierungen durchzuführen.
    Durch die Angabe von ios::binary sagst du aber, dass die Daten *nicht* als Text interpretiert werden sollen (keine Konvertierung der externen Darstellung von EOL in die interne usw.).
    Solche Daten kannst du nicht durch die op>> der istream-Klassen bearbeiten lassen. Hier kannst du nur mit den Funktionen für das unformatierte Lesen arbeiten (read).
    Bedenke: Die op>> lesen nicht. Sie sind außschließlich zur Formatierung da (lesen tut der drunterliegende streambuf).

    Du musst dich also entscheiden. Entweder ios::binary + read oder kein ios::binary und op>>.

    [ Dieser Beitrag wurde am 14.04.2003 um 10:58 Uhr von HumeSikkins editiert. ]



  • Ich danke dir HumanSikkins,

    Die eine Zeile muss tatsächlich so
    ifstream f("c:\\test.grf", ios::binary|ios:in)
    heissen.
    Mein "Hirnwindungen" waren da vielleicht etwas schneller als meine Finger.

    Das mit dem read und op>> habe ich allerdings bis jetzt noch nicht gewusst.
    DANKE nochmal

    Ich habe gerade die Sache mit
    ifstream f("c:\\test.grf");
    f>>Daten;
    probiert,allerdings ist der Erfolg ist derselbe wie vorher, also irgendwie mag mich der >> Operator nicht so richtig.
    Aber warum weiss ich nicht!!! 😕

    [ Dieser Beitrag wurde am 14.04.2003 um 13:18 Uhr von maam editiert. ]



  • Wenn du alles Byte für Byte nacheinander möchtest, ist der op>> nichts für dich
    der lässt z.B. Leerzeichen aus, newlines, etc.

    ifstream file("C:/blub.dat", ios::binary);
        char byte;
        while (file.read(&byte, 1))
                  do_some_weird_work (byte);
    


  • Ich dank dir.
    Ich glaube jetzt zu verstehen, warum es nicht funktioniert.
    Ich habe es nun auch mit f.read gelöst.

    DANKE



  • wäre byte=file.get() nicht uU besser als file.read(&byte,1)

    ich finde es zumindest intuitiver...


Anmelden zum Antworten