1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| /*
Ein kleines Programm um zu zeigen, wie man Dateien einliest.
Das ganze baut ziemlich direkt hierauf auf:
https://de.wikibooks.org/wiki/C-Programmierung:_Dateien
*/
#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
int main(void)
{
/* Wenn wir eine Datei öffnen bekommen wir einen Zeiger (daher der Stern)
vom Datentyp FILE zurück -- dafür legen wir eine Variable an */
FILE *datei;
/* Wir legen zusätzlich ein Char-Array (^= String) mit 101 Einträgen an, in
dem wir beim Einlesen Daten zwischenspeichern können. Ebenso legen wir
dafür eine int-Variable an. */
char text[100 + 1];
int zahl;
/* Wir öffnen die Datei. Zuerst benötigen wir den Dateinamen und dann, wie
sie geöffnet werden soll (lesend, schreibend, …). Wir wollen jetzt erst
mal etwas in die Datei schreiben. */
datei = fopen("testdatei", "w");
/* fopen gibt NULL zurück, wenn die Datei nicht geöffnet werden konnte. */
if (datei == NULL) {
printf("Konnte Datei nicht zum schreiben öffnen.\n");
return EXIT_FAILURE;
}
/* fprintf funktioniert analgo zu printf, schreibt jedoch die Ausgabe in
die Datei statt auf die Standardausgabe. */
fprintf(datei, "Die_Antwort_auf_alles_ist?\n");
fprintf(datei, "%d\n", 42);
/* Wenn wir fertig sind, müssen wir die Datei schließen. */
fclose(datei);
printf("Datei erfolgreich geschrieben.\n");
/* Wir öffnen die Datei zum lesen. */
datei = fopen("testdatei", "r");
/* fopen gibt NULL zurück, wenn die Datei nicht geöffnet werden konnte. */
if (datei == NULL) {
printf("Konnte Datei nicht zum lesen öffnen.\n");
return EXIT_FAILURE;
}
/* fscanf versuch das angegebene Muster (gegenteilig zu fprintf) aus der
Datei zu lesen und in die übergebenen Variablen zu speichern.
Da die Variable "text" schon ein Zeiger ist (Arrays und Strings sind
immer Zeiger) können wir einfach "text" übergeben. */
fscanf(datei, "%s\n", text);
/* Wir schreiben in das letzte Feld unser Zeichenkette ein Null-Byte, damit
bei der Ausgabe nicht zu viel ausgegeben wird, falls der String in der
Datei länger war als 100 Zeichen (dann haben wir aber auch noch ein
anderes Problem, nämlich einen Pufferüberlauf). */
text[100] = '\0';
printf("In der ersten Zeile stand: %s\n", text);
/* Aus der nächsten Zeile wollen wir die Zahl einlesen. Hier ist es
wichtig, dass wir einen Zeiger auf die eigentliche Variable übergeben,
um fscanf zu sagen, wo er das Ergebnis hinspeichern soll. */
fscanf(datei, "%d\n", &zahl);
printf("In der zweiten Zeile stand: %d\n", zahl);
/* Wenn wir fertig sind, müssen wir die Datei schließen. */
fclose(datei);
}
|