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