Programmieren in ANSI-C
Kapitel 7: Dateien

Die Adressdatenbank im vorherigen Kapitel sieht schon nicht schlecht aus. Die Tatsache, dass wir alle Daten jedesmal wenn wir dei Datenbank verwenden wollen neu eingeben müssen, macht das Programm sehr sinnlos. Wir brauchen also Funktionen, um Daten auf der Festplatte zu speichern und wieder zu laden.


7.1 Dateien öffnen

Zunächst müssen wir uns darum kümmern, eine vorhandene Datei zu öffnen, bzw. eine neue Datei anzulegen. Beide Vorgänge sind im prinzip äquivalent. Wir Bedienen uns der Funktion fopen, um eine Datei zu öffnen. Wollen wir schreibend auf diese Datei zugreifen, legt das System bei Bedarf eine neue Datei an oder überschreibt eine vorhandene. fopen gibt NULL zurück, wenn beim öffnen ein Fehler aufgetreten ist.

fopen gibt bei Erfolg einen Zeiger auf eine Dateistruktur FILE zurück, die wir in einer entsprechenden Variable ablegen müssen:


FILE *datei_z;
datei_z = fopen( "adressen.dat", "rt" );

Die Funktion erwartet den Dateinamen und einen Steuer-String als Parameter. Der Steuerstring besteht aus dem Datei-Modus (lesen (r), schreiben (w), anhängen (a) ) und dem Dateityp (Textdatei (t) oder Binärdatei (b) ). Es gibt noch Kombinationen aus den Modi (z.B. "r+b" ), die uns an dieser Stelle allerdings nicht weiter interessieren. Auch auf Binärdateien möchte ich im Moment nicht näher eingehen. Aus ihnen kann im wesentlichen jedes Byte einzeln gelesen werden und der Dateizeiger exakt auf eine bestimmte Stelle gesetzt werden.

Wie gesagt beschäftigen wir uns im Moment nur mit Textdateien. Wir benötigen lediglich die beiden Steuercodes "rt" zum lesen und "wt" zum schreiben.

Moduswechsel: Um vom Lesemodus in den Schreibmodus zu wechslen oder umgekehrt , müssen wir die Datei zuerst die Datei schließen und im neuen Modus wieder öffnen.


7.2 Daten lesen und schreiben

Wir schreiben Daten in eine Datei genau wie bei der Bildschirmausgabe. Der Befehl heißt analog fprintf. Die Parameter und Formatangaben sind ebenfalls FAST gleich. Gleiches gilt auch für fscanf. Hier ist zu beachten, dass das erste Zeichen im Formatstring ein Leerzeichen sein MUSS, damit evtl. Leerzeilen in der Datei überlesen werden. Beide Funktionen erwarten als ersten Parameter den Dateizeiger:


fscanf( datei_z, " %s %s %d", string1, string2, &zahl );
fprintf( datei_z, "%20s %10s %d", string1, string2, zahl );


7.3 Dateiende

Nach jedem Leseversuch müssen wir prüfen, ob evtl. das Dateiende erreicht wurde. Zu beginn müssen wir zusätzlich prüfen, ob überhaupt etwas in der Datei steht. Dazu verwenden wir die Funktion feof( datei_z ). Sie gibt TRUE zurück, wenn das Dateiende erreicht wurde. Eine while-Schleife kann dann so aussehen: while( !feof( datei_z ) ) { Anweisungen; }.

Um eine Datei wieder von vorne ab zu lesen, können wir mit rewind( datei_z ) den Dateizeiger wieder an den logischen Dateianfang setzten.


7.4 Dateien schließen

Haben wir alle Operationen beendet, wir unsere Datei mit fclose( datei_z ) wieder geschlossen.

Das Beispeil demonstriert den Umgang mit Dateien. Dazu ist die mitgelieferte Datei kunden.txt ins gleiche Verzeichnis wie die exe-Datei zu kopieren. Es wird eine neue Datei kundenneu.txt angelegt, die keine Duplikate mehr enthält.

[ Beispiel ]


© Gerhard Zapf
Zeiger & Strukturen
Sitemap
www.tutorialpage.de
Aufgaben
Diese Seite wurde seit dem 12.07.01 genau 4485 mal abgerufen.
Letzte Änderung: 11.09.2003