21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />

21 Datei I/O<br />

Das Arbeiten mit Dateien läuft gr<strong>und</strong>sätzlich über FILE-Objekte. Sämtliche Dateifunktionen benötigen<br />

e<strong>in</strong>en Zeiger auf e<strong>in</strong> solches Objekt. <strong>E<strong>in</strong>e</strong> vollständige Beschreibung aller Dateifunktionen<br />

bef<strong>in</strong>det sich im Kapitel 19.5.1. <strong>E<strong>in</strong>e</strong> Datei wird <strong>in</strong> C gr<strong>und</strong>sätzlich als e<strong>in</strong>e Folge von Bytes betrachtet.<br />

Bevor mit e<strong>in</strong>er Datei gearbeitet werden kann, muss mit fopen() e<strong>in</strong>e neues, mit <strong>die</strong>ser Datei<br />

verknüpftes FILE-Objekt erzeugt werden. fopen() liefert e<strong>in</strong>en Zeiger auf das FILE-Objekt zurück,<br />

wenn das Öffnen der Datei erfolgreich war, <strong>und</strong> NULL wenn e<strong>in</strong> Fehler aufgetreten ist. Nach<br />

dem Öffnen e<strong>in</strong>er Datei muss immer auf Fehler geprüft werden bevor mit ihr gearbeitet wird.<br />

#<strong>in</strong>clude <br />

FILE *DieDatei;<br />

DieDatei = fopen("c:\\Test.txt", "w");<br />

if (DieDatei == NULL) {<br />

pr<strong>in</strong>tf("Fehler, konnte <strong>die</strong> Datei nicht oeffnen!\n");<br />

}<br />

Das erste Argument der Funktion fopen() ist der Name der zu öffnenden Datei, das zweite <strong>die</strong><br />

Zugriffsart auf <strong>die</strong> Datei:<br />

"r" Textdatei zum lesen öffnen<br />

"w" Textdatei zum Schreiben erzeugen; gegebenenfalls alten Inhalt wegwerfen<br />

"a" anfügen; Textdatei zum Schreiben am Dateiende öffnen oder erzeugen<br />

"r+" Textdatei zum Ändern öffnen (Lesen <strong>und</strong> Schreiben)<br />

"w+" Textdatei zum Ändern erzeugen; gegebenenfalls alten Inhalt wegwerfen<br />

"a+" anfügen; Textdatei zum Ändern öffnen oder erzeugen, Schreiben am Ende<br />

Dateien können im B<strong>in</strong>är oder Textformat geöffnet werden, bei UNIX Betriebssystemen hat das<br />

Format ke<strong>in</strong>e Bedeutung, bei Dos <strong>und</strong> W<strong>in</strong>dows wird im Textmodus der Zeilenvorschub ('\n') beim<br />

Schreiben <strong>in</strong> <strong>die</strong> Sequenz von Zeilenvorschub <strong>und</strong> Wagenrücklauf ('\n' '\r') umgewandelt, <strong>und</strong> beim<br />

Lesen umgekehrt <strong>die</strong> Sequenz '\n' '\r' wieder <strong>in</strong> e<strong>in</strong> e<strong>in</strong>faches '\n'. Beim Lesen im Textmodus wird<br />

unter Dos/W<strong>in</strong>dows zudem das Zeichen mit dem ASCII-Code 26 (EOF, CTRL-Z) als Dateiende<br />

angesehen, der Rest der Datei nach <strong>die</strong>sem Zeichen kann somit nicht gelesen werden.<br />

Um im B<strong>in</strong>ärmodus zu arbeiten, muss den oben angegebenen Zugriffsarten noch e<strong>in</strong> 'b' angehängt<br />

werden, also z. B. "rb" oder "w+b".<br />

Wenn <strong>die</strong> Datei nicht mehr benötigt wird, muss sie mit fclose() wieder geschlossen werden.<br />

fclose (DieDatei);<br />

Zur Arbeit mit Textdateien können ähnliche Funktionen wie zur E<strong>in</strong>/Ausgabe über Bildschirm <strong>und</strong><br />

Tastatur verwendet werden, den Funktionsnamen ist e<strong>in</strong>fach e<strong>in</strong> f vorangestellt <strong>und</strong> sie haben e<strong>in</strong>en<br />

File-Po<strong>in</strong>ter als zusätzliches Argument:<br />

Tastatur/Bildschirm Funktion Datei<br />

pr<strong>in</strong>tf("Wert ist %d", i); Formatierte Ausgabe fpr<strong>in</strong>tf(DieDatei, "Wert ist %d",i);<br />

scanf("%f", &f); Formatierte E<strong>in</strong>gabe fscanf(DieDatei, "%f", &f);<br />

c = getchar(); Zeichen e<strong>in</strong>lesen c = fgetc(DieDatei);<br />

putchar(c); Zeichen ausgeben fputc(c, DieDatei);<br />

gets(Buffer); Zeile e<strong>in</strong>lesen *) fgets(Buffer, MaxLength, DieDatei);<br />

puts(Text); Zeile ausgeben *) fputs(Text, DieDatei);<br />

*)<br />

Achtung, Zeilenwechsel werden von den f... Funktionen anders behandelt (Nicht entfernt <strong>und</strong> h<strong>in</strong>zugefügt).<br />

Gedruckt am 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 84/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!