fopen, binary file?



  • Beim Binären wird 1-zu-1 gelesen oder geschrieben. Bei Textdateien können die Daten vom Betriebssystem verändert werden. Zb bei Windows die Konvertierung von "\n" <-> "\r\n".



  • Was ist denn jetzt kaputt? Ich hab mir also mal ein kleines Testprogramm geschrieben, aber schon bei diesem code ist f immer NULL. Woran kann das denn liegen?

    #include <stdio.h>
    
    int main()
    {
    	FILE *f;
    
    	f = fopen("r.txt", "r");
    
    	return 0;
    }
    


  • Das kann viele Gründe haben - Datei ist nicht vorhanden, gelockt, ...



  • hm, ich dachte fopen erstellt dann eine leere Datei, wenn sie nicht vorhanden ist...



  • Nur wenn du die Datei zum Schreiben öffnest (w oder a).



  • ja das ist mir auch gerade aufgefallen. Erst denken, dann posten 🙂



  • so ich hab mir jetzt endlich mal ein kleines Testprogramm dazu geschrieben.
    Es schreibt einen Testsatz in zwei Dateien jeweils einmal mit dem normalen und einmal im binary mode geöffnet.
    Dann lese ich das ganze auch wieder normal und binär aus und lasse mir die Zeichen als integers anzeigen.

    Und für den Satz: "Dies ist ein Test für eine Datei im r-Modus." sind die Zeichen in beiden Dateien exakt gleich (auch das linefeed als ASCII 10)

    Das was lagalopex geschrieben hat, macht zwar Sinn, aber wenn hier nur von "kann" die Rede ist, dann verstehe ich nicht, wieso ich in so vielen codes mal den einen und mal den anderen modus sehe. Irgendeinen Grund muss das doch haben.



  • Mit Hilfe des binären Schreibmodus kann man Speicherbereiche bitweise in eine Datei schreiben oder von ihr lesen. Das heisst, wenn man z.B. ein Array oder ein POD im Arbeitsspeicher hat, kann man das 1:1 in die Datei schreiben. Beim Lesen kann man dann den Speicherbereich wieder durch den Eintrag in der Binärdatei ersetzen. Aber das ist nicht immer ganz zuverlässig, z.B. für Klassen mit Zeigern etc. kann es nicht funktionieren. Oder auch wenn man nur wenig am Datentyp ändert, sind die Informationen in der Datei nutzlos.



  • Ahso, d.h. mit dem normalen modus würde ich schonmal Probleme kriegen, wenn die Anzahl der bits nicht durch 8 teilbar ist?!

    Und was ist eigentlich ein POD? 🙂



  • banshee schrieb:

    Und was ist eigentlich ein POD? 🙂

    Plain old data:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-194356-and-highlight-is-*pod*.html



  • banshee schrieb:

    Ahso, d.h. mit dem normalen modus würde ich schonmal Probleme kriegen, wenn die Anzahl der bits nicht durch 8 teilbar ist?!

    Nicht zwingend, es kommt halt drauf an, wie du den Speicherbereich interpretierst (wenn nicht direkt Bit für Bit). Wobei ich mich frage, wo die Anzahl Bits nicht durch 8 teilbar ist... Du arbeitest ja nicht mit Bitfeldern, oder?


Anmelden zum Antworten