Willkommen beim sechsten Teil des C-Kurses! |
Bisher hatten wir, recht erfolgreich, schon kleinere Programme geschrieben,
die schon recht ansehnlich waren. Doch sie hatten ein Manko: Die eingegebenen
Daten waren nach dem Beenden der Programme im Nirvana gelandet. Dem wollen
wir abhelfen, indem wir uns im 6. Teil mit der Erstellung von Daten auf
der Festplatte befassen.
Das Öffnen und Schließen einer Datei |
Für C ist eine Datei nichts anderes als eine Ansammlung von Zeichen,
unabhängig, was drin steht. Um mit einer Datei unter C zu arbeiten,
muß man sie "öffnen".
|
fopen |
Mittels fopen wird eine Datei geöffnet. Als Argument werden die
zu bearbeitende Datei und der Arbeitsmodus übergeben.
|
Öffnen der Datei zum Lesen ( r = read )
Rückgabe ist NULL wenn die Datei nicht existiert, oder keine Leserechte bestehen. |
|
Öffnen der Datei zum Schreiben ( w = write )
Rückgabewert ist NULL wenn die Datei READ-ONLY ist, oder nicht existiert. |
|
Öffnen der Datei zum anhängen ans Ende ( a = append ) Wenn
die Datei existiert, wird das geschriebene ans Ende gehängt. Wenn
die Datei nicht existiert, wird sie angelegt.
Rückgabewert ist NULL, wenn keine Datei erstellt werden darf oder die Datei nicht beschrieben werden darf. |
|
Die Datei wird zum Öffnen und Schreiben geöffnet.
Rückgabewert ist NULL, wenn die Datei nicht existiert, oder keine Lese- und Schreibrechte für die Datei existieren. |
|
Anlegen einer neuen Datei. Existiert die Datei schon, so wird sie gelöscht!
Rückgabewert ist NULL, wenn die der Ersteller keine Rechte für diese Aktionen hat. |
|
Öffnen einer Datei zum Lesen oder zum Schreiben (anhängen)
am Ende. Die Datei wird erstellt, falls sie nicht existiert.
Rückgabewert ist NULL, wenn eine Datei nicht gelesen oder beschrieben werden darf, bzw. wenn die Dateirechte nicht ausreichend sind. |
Es sind folgende Zusätze erlaubt:
t | Die Datei wird im Textmodus geöffnet und Konvertierungen werden vorgenommen. Dies ist der Defaultmodus und braucht in der Regel nicht angegeben werden. |
b | Die Datei wird im Binärmodus geöffnet. Es werden keine Konvertierungen vorgenommen! |
Beispiel:
|
Für die Datei gilt der Arbeitsmodus "a".
Datei wird im Binärmodus geöffnet. |
|
Für die Datei gilt der Arbeitsmodus "w".
Die Datei wird im Textmodus geöffnet. |
fclose |
Mit fclose können wir die Dateien, die wir mit fopen öffneten
wieder schließen.
fclose (datei); |
Hier werden die Schreibpuffer auf das Medium zurückgeschrieben und die Verzeichniseinträge aktualisiert.
datei ist vom Typ *FILE und wurde mit fopen initialisiert!
... und was man sonst damit machen kann
Was tun, sprach Zeus..... Das File ist geöffnet und weiter ? Files auf und zu machen ist auf die Dauer recht Fade! Etwas wie printf oder scanf müßte es geben. Und in der Tat....
In den folgenden Beispielen ist datei immer eine mittels fopen erzeugte
Variable vom Typ *FILE! (Zeiger auf den Typ FILE)
Lesen und schreiben in Files |
fscanf |
Der Befehl verhält sich genau wie scanf - mit nur einem Unterschied,
hier wird angegeben woher die Information kommen soll.
fscanf ( datei , "%c", &zeichen); |
Der Befehl ist also Vergleichbar mit einem
scanf ( "%c", &zeichen ); |
Der einzige Unterschied: Hier wird von einer Datei gelesen. Die Variable
zeichen
ist vom Typ char.
fprintf |
Und hier kann man ahnen was folgt.....
fprintf ( datei , "\nHallo - Das File ist geöffnet :-)\n\n"); |
Wie oben ist er equivalent mit der Bildschirmausgabe
printf ( "\nHallo - Das File ist geöffnet :-)\n\n" ); |
Nur, das wieder in das File geschrieben wird.
Standardkanäle in C |
Kanäle ? Ich kenn nur Canale Grande.... C legt bei jedem Start
eines Programms drei fest definierte Ein- & Ausgabekanäle an.
Sie müssen nicht definiert werden! In der Regel werden diese Ein-,
Ausgabekanäle sehr selten benutzt.
stdin |
Der Standardeingabekanal Normalerweise die Tastatur
scanf ( ... ) |
ist identisch mit
fscanf ( stdin, ... ) |
stdout |
Der Standardausgabekanal Normalerweise der Bildschirm
printf ( ... ) |
ist identisch mit
fprintf ( stdout , ... ) |
stderr |
Der Standardfehlerkanal Normalerweise werden die hier Übertragenen
Fehlermeldungen auch auf dem Bildschirm mit ausgegeben und sind zu Diagnosezwecken
sinnvoll. Von praktischem Nutzen wird das ganze, wenn der Standardausgabekanal
nicht mehr der Bildschirm ist und man trotzdem Feedback haben möchte.
Beispielprogramm |
So, jetzt können wir schon eine ganze Menge anfangen. Das untere
Programm einfach mal ausprobieren und sich das erzeugte File anschauen.
Testen Sie den Unterschied zwischen Text- und Binärmodus!
#include <stdio.h>
void main ( void ) {
datei = fopen ( "test.dat" , "w+" ); if (datei == NULL ) {
else {
fprintf (datei, "\nUnsere erste Datei :-)\n\n"); fprintf (datei, "Wenn das so weiter geht ist unser Freund Bill arbeitslos\n"); printf ("\n...und die Datei ist wieder zu\n"); fclose (datei); |
Das ist unser erster Ausflug zu den Dateioperationen. Im nächsten Teil werden wir uns mit Datenstrukturen befassen.
Und wer wissen will, wo das ganze hinausläuft : Wir werden unsere
eigene Datenbank schreiben!
Hausaufgaben |
Aber vor den Erfolg hat Gott die Aufgaben des PCD´s gesetzt, die da wären:
1) Schreiben sie ein kleines Programm, welches 5 Zeilen vom Bildschirm einliest und in eine Datei schreibt.
2) Spielen sie ein bischen mit den Operationsmodi für die Dateien
herum. Nichts geht über Praxis!
...das Obligatorische |
Autor: Sebastian Cyris \ PCD Bascht
Dieser C-Kurs dient nur zu Lehrzwecken! Eine Vervielfältigung ist ohne vorherige Absprache mit dem Autor verboten! Die verwendete Software unterliegt der GPL und unterliegt der Software beiliegenden Bestimmungen zu deren Nutzung! Jede weitere Lizenzbestimmung die der benutzten Software beiliegt, ist zu beachten!