Probleme beim Lesen von Binärdateien



  • HI!

    Ich versuche mich gerade mit dem Einlesen von Dateien per fgets.
    Dabei kam mir die Idee, dass eine Datei ja auch Nullen und diverse andere nicht druckbare Zeichen enthalten kann.
    Ich schreibe z.B. zum Testen den String

    char zeile[]="\0\0\0\0\n";
    

    in eine Datei.
    Beim Einlesen können scheinbar die seltsamsten Dinge passieren, z.B. findet strrchr das Newline nicht, strlen kann man auch vergessen, etc.
    Welche Probleme können beim Lesen von Binärdateien sonst noch vorkommen?
    Was fällt euch dabei alles ein?
    MFG



  • Wie schreibst du denn die Daten in die Datei?

    Stringfunktionen sind nicht geeignet für die Verarbeitung von Binärdaten.

    Zum schreiben und lesen musst du fwrite und fread nehmen.

    Für strrchr (eine Stringfunktion) ist der String beim ersten '\0' zu Ende.



  • Ich schreibe sie mit fwrite rein zum Testen.
    Das die Stringfunktionen nicht für Binärdateien geegnet sind, weiß ich auch.
    Ich bin kein Anfänger! 🕶
    ⚠ Hmm ... ich frage mich, ob man überhaupt ruhigen Gewissens ein Programm schreiben kann, das Dateien mit fgets einliest.
    Für sich zu Hause, hobbymäßig, gut, aber ansonsten ...
    💡 Eigentlich müsste man die Dateien mit fread saugen und jedes einzelne Zeichen auf Gültigkeit prüfen!
    MFG



  • fabulus multipus schrieb:

    Das die Stringfunktionen nicht für Binärdateien geegnet sind, weiß ich auch.

    Warum machst du es denn?

    fabulus multipus schrieb:

    Ich bin kein Anfänger! 🕶
    ⚠ Hmm ... ich frage mich, ob man überhaupt ruhigen Gewissens ein Programm schreiben kann, das Dateien mit fgets einliest.
    Für sich zu Hause, hobbymäßig, gut, aber ansonsten ...

    Wenn du so eine frage stellst, bezweifele ich deine Ausssage.

    fabulus multipus schrieb:

    💡 Eigentlich müsste man die Dateien mit fread saugen und jedes einzelne Zeichen auf Gültigkeit prüfen!
    MFG

    Bist du jetzt selber darauf gekommen, nachdem ich es dir gerade eben vorgeschlagen habe?



  • fabulus multipus schrieb:

    Beim Einlesen können scheinbar die seltsamsten Dinge passieren, z.B. findet strrchr das Newline nicht, strlen kann man auch vergessen, etc.
    Welche Probleme können beim Lesen von Binärdateien sonst noch vorkommen?

    Es kommt halt darauf an, was du einlesen willst, bzw. wie dein Dateiformat definiert ist. Allgemein kann man sagen, dass man entweder eine statische Anzahl an Bytes einließt oder man ließt erst einen Längenwert ein und dann die Bytes an dem Offset mit der gelesenen Länge.



  • fabulus multipus schrieb:

    Beim Einlesen können scheinbar die seltsamsten Dinge passieren, z.B. findet strrchr das Newline nicht, strlen kann man auch vergessen, etc.

    Das liegt nicht an der Binärdatei sondern an Deinem mangelnden Verständnis, was Strings sind und wie diese Funktionen arbeiten, die Du da nutzt.

    Ein String ist eine lineare Ansammlung von Bytes, dessen Ende durch ein \0 gekennzeichnet ist. Dieses Endekennzeichen schreibst Du als erstes in eine Datei, liest daraus und wunderst Dcih, warum die Funktionen das tun, was diese tun sollen, z.B strlen liefert 0 oder strrchr findet in dem leeren String nichts.

    Also nicht überraschend für jemand, der kein Anfänger ist, oder?

    Ciao
    MM


Anmelden zum Antworten