Fread ?

Hallo,

ich habe ein Programm geschrieben, das eine Binärdatei
einliest. Bei einigen Binärdateien funktioniert es, bei
anderen gibt fread 0 zurück und die Fehlerbehandlungsroutine
sagt mir dann, daß das Ende der Datei erreicht ist, obwohl das
nicht der Fall ist. Die Binärdatei ist auch in Ordnung, habe ich überprüft. Weiß jemand was falsch sein könnte ? Danke im Voraus.

Gruß Patrick

eventuell beeinhaltet die Datei ein EOF-Char als Inhalt, also nicht nur am Ende. Das kommt oft vor bei Konventierungen von UNIX/Linux.

Hi Patrick :wink:))

Anscheinend sind die Dateien mittels Append erstellt worden. Wenn du nämlich fopen(file,„a“) schreibst, wird das alte EOF-Zeichen nicht gelöscht, d.h. nachher steht ein EOF-Zeichen mitten im File herum. Wenn du dagegen die Datei mit fopen(file,„a+“) öffnest, dann wird das alte EOF-Zeichen gelöscht! Viele Programmierer kennen diesen feinen Unterschied nicht, und so kann es zu dem von dir beschriebenen Fehler kommen. In deinem Fall sieht es so aus, als sei die Datei zunächst nur erzeugt und wieder geschlossen worden (Länge 0). Anschließend ist sie dann vermutlich mittels fopen(file,„a“) zum Anhängen geöffnet worden.

cu Stefan.

Hallo !

Wenn Du die Datei im Binaermodus oeffnest(z.B. „rb“) findet keine Interpretation irgendwelcher EOF’s statt. Eine Binaerdatei kann schliesslich jedes Zeichen von 00 bis FF enthalten. Ich glaube ich hatte schon einmal so ein EOF- Problem, als ich eine Binaerdatei lesen wollte und das Ding nicht explizit als Binaerdatei geoeffnet hatte (ich glaube ich hatte „r“ benutzt ). Da hat fread auch immer abgebrochen wenn ein EOF kam. Versuchs auf jeden Fall mal mit „rb“.

Tschuess !

Andreas

PS: EOF entstehen nicht durch UNIX/LINUX-> DOS Konvertierungen, dass ist nur eine Konvertierung der Zeilenumbrueche (0D 0A zu 0A), wenn man eine ASCII Konvertierung einschaltet.

Hallo Andreas, Stefan und Roger,

danke für eure Antworten. Die Ursache für mein Problem
war, daß ich die Datei nicht im Binärmodus geöffnet habe
und irgendwann war dann mittendrin Schluß mir einlesen.
Danke nochmals.

Gruß Patrick