fopen()

fopen() ist in der stdio definiert, die in C über stdio.h, bzw in C++ über cstdio eingebunden wird.

Funktion

fopen() wird dazu verwendet, einen Stream bzw. eine Datei zu öffnen. Sie nimmt dazu 2 Parameter. Der Stream bzw. die Datei kann auf unterschiedliche Arten geöffnet werden.

Signatur

#include <stdio.h>
FILE * fopen( char const * filename, char const * mode );

filename: Evtl. Pfad und Dateiname der zu öffnenden Datei.
mode: Anweisung, wie die Datei zu öffnen ist.

Return Value: Zeiger auf geöffneten Stream oder NULL im Falle eines Fehlers.

Je nach Modus befindet sich die Schreib-/Lese-Position am Anfang der Datei, wenn angefügt werden soll befindet sie sich direkt am Ende der Datei, so dass am Ende der Datei geschrieben werden kann. Die Position kann nach dem Öffnen mit fseek() beliebig versetzt werden.

mode Wirkung Position im File
„r“ Die Datei wird zum Lesen geöffnet. Es kann nicht geschrieben werden, die Datei muss existieren und wird nicht angelegt. Anfang
„w“ Die Datei wird zum Schreiben geöffnet. Existiert sie nicht, wird sie erstellt, eine vorhandene Datei wird überschrieben. Daten werden am Beginn der Datei geschrieben. Anfang
„a“ Die Datei wird zum Anhängen geöffnet, existiert die Datei nicht, so wird sie erstellt. Daten werden hinten an die Datei angehängt. Ende
„r+“ Die Datei wird zum Lesen und Schreiben geöffnet, die Datei muss existieren und wird nicht angelegt. Anfang
„w+“ Die Datei wird zum Lesen und Schreiben geöffnet. Existiert sie nicht, wird sie erstellt. Daten werden am Beginn der Datei geschrieben. Anfang
„a+“ Die Datei wird zum Lesen und Schreiben geöffnet. Existiert sie nicht, wird sie erstellt. Daten werden hinten an die Datei angehängt. Ende

Per Default werden Dateien zeilenorientiert geöffnet. Hängt man dem mode zusätzlich ein „b“ an (z.B. „r+b“), so wird die Datei im Binärmodus geöffnet.

Fehlerquellen

Ein oft vorkommender Fehler ist, dass die Datei, die zum Lesen geöffnet werden soll, nicht existiert bzw. der Pfad zu ihr falsch angegeben ist. Auch kann es passieren, dass die erforderlichen Rechte um eine Datei zu öffnen nicht vorhanden sind. In beiden Fällen resultiert das in der Rückgabe eines NULL-Pointers.

Ein unangenehmer Fehler kann auftreten, wenn man eine existierende Datei zum Schreiben („w“ oder „w+“) öffnet. Dabei wird die Schreibposition an den Anfang der Datei gesetzt. Schreibt man nun in die Datei, so wird der vorherige Inhalt überschrieben.

Fehler können auch auftreten, wenn eine Datei nach der Benutzung nicht wieder ordnungsgemäß geschlossen wird. Eine Datei schließt man mit fclose().

Beispiel

#include <stdio.h>
#include <stdlib.h>
 
int main (void)
{
  FILE *file = fopen("testfile.txt", "r");
  // (...)
  fclose(file);
  return EXIT_SUCCESS;
}

siehe auch