ifstream::get() liefert unterschiedliche Ergebnisse

Jennesta

Erfahrenes Mitglied
Hi,
es handelt sich hier mehr um ein Verständnisproblem, als ein Programmiertechnisches.
Ich habe ein bisschen damit gespielt mir einen Hexdump von Datein ausgeben zu lassen.

Dabei habe ich erst die Datei im default-mode geöffnet (ios_base::in). Hier habe ich festgestellt, dass obwohl ich vorher die Anzahl Zeichen der Datei mit tellg() ermittelt habe nicht mit get() hinkomme. Der Unterschied lag in der Anzahl der Zeilenumbrüche.

Erst als ich durch Zufall auf den Binary-mode gestossen bin lieferte mir get() auch jedes Zeichen der Datei. Scheinbar wurde nämlich nie das CR gelesen.
Da frage ich mich nun, wieso zählt tellg() trotz default-mode die CRs mit obwohl get() dies nicht tut.

Grüße Jennesta
 
Hi

das ist unter Windows generell so.
Bei "Text"-Dateien wird dem Zeilenwechsel \n beim Schreiben znoch ein \r dazugeschrieben,
beim Einlesen werden beide zusammen dann wieder zu \n
Im Binärmodus passiert das nicht.

Und tellg geht nicht die ganze Datei durch und prüft auf Zeilenwechsel,
sondern gibt einfach die Byteanzahl zurück.

Gruß
 
Ok danke für die Erklärung.
Mal sehen wie man diese Erkenntnis bei der Linux und Windows-Kommunikation brauchen kann/nutzen muss.
 
Zurück