std::fopen
| Definiert in Header <cstdio> |
||
| std::FILE* fopen( const char* filename, const char* mode ); |
||
Öffnet eine Datei, die durch filename angegeben ist, und gibt einen Dateistream zurück, der mit dieser Datei verbunden ist. mode wird zur Bestimmung des Dateizugriffsmodus verwendet.
Inhalt |
[bearbeiten] Parameter
| filename | - | Dateiname, dem der Dateistream zugeordnet werden soll |
| mode | - | nullterminierte Zeichenkette, die den Dateizugriffsmodus bestimmt |
[bearbeiten] Datei Zugriffsmodi
| Datei-Zugriff Modus-String |
Bedeutung | Erklärung | Aktion, wenn Datei bereits existiert |
Aktion, wenn Datei nicht existiert |
|---|---|---|---|---|
| "r" | read | Datei zum Lesen öffnen | lesen ab Anfang | gibt NULL zurück und setzt den Fehler |
| "w" | schreiben | Datei zum Schreiben erstellen | Inhalt löschen | neu erstellen |
| "a" | append | An eine Datei anhängen | Ende schreiben | neu erstellen |
| "r+" | erweitertes Lesen | Datei zum Lesen/Schreiben öffnen | lesen ab Anfang | gibt NULL zurück und setzt den Fehler |
| "w+" | erweitertes Schreiben | Datei zum Lesen/Schreiben erstellen | Inhalt löschen | neu erstellen |
| "a+" | erweitertes Anhängen | Datei zum Lesen/Schreiben öffnen | Ende schreiben | neu erstellen |
| Das Flag für den Dateizugriffsmodus "b" kann optional angegeben werden, um eine Datei im Binärmodus zu öffnen. Dieses Flag hat keine Auswirkungen auf POSIX-Systemen, aber unter Windows deaktiviert es beispielsweise die spezielle Behandlung von '\n' und '\x1A'. Bei Anhänge-Dateizugriffsmodi werden Daten am Ende der Datei geschrieben, unabhängig von der aktuellen Position des Dateipositionsindikators. | ||||
| Das Flag für den Dateizugriffsmodus "x" kann optional an die Spezifizierer "w" oder "w+" angehängt werden. Dieses Flag bewirkt, dass die Funktion fehlschlägt, wenn die Datei existiert, anstatt sie zu überschreiben. (C++17) | ||||
| Das Verhalten ist undefiniert, wenn der Modus keiner der oben aufgeführten Strings ist. Einige Implementierungen definieren zusätzliche unterstützte Modi (z. B. Windows). | ||||
[bearbeiten] Rückgabewert
Bei Erfolg wird ein Zeiger auf das Objekt zurückgegeben, das den geöffneten Dateistream steuert, wobei sowohl die EOF- als auch die Fehlerbits gelöscht sind. Der Stream ist vollständig gepuffert, es sei denn, filename bezieht sich auf ein interaktives Gerät.
Bei einem Fehler wird ein Nullzeiger zurückgegeben. POSIX schreibt vor, dass in diesem Fall errno gesetzt wird.
[bearbeiten] Hinweise
Das Format von filename ist implementierungsabhängig und bezieht sich nicht unbedingt auf eine Datei (z. B. kann es die Konsole oder ein anderes über die Dateisystem-API zugängliches Gerät sein). Auf Plattformen, die sie unterstützen, kann filename absolute oder relative Dateipfade enthalten.
Für portablen Verzeichnis- und Dateinamen siehe C++ Dateisystembibliothek oder boost.filesystem.
[bearbeiten] Beispiel
#include <cstdio> #include <cstdlib> int main() { int is_ok = EXIT_FAILURE; FILE* fp = std::fopen("/tmp/test.txt", "w+"); if (!fp) { std::perror("File opening failed"); return is_ok; } int c; // Note: int, not char, required to handle EOF while ((c = std::fgetc(fp)) != EOF) // Standard C I/O file reading loop std::putchar(c); if (std::ferror(fp)) std::puts("I/O error when reading"); else if (std::feof(fp)) { std::puts("End of file reached successfully"); is_ok = EXIT_SUCCESS; } std::fclose(fp); return is_ok; }
Ausgabe
End of file reached successfully
[bearbeiten] Siehe auch
| schließt eine Datei (function) | |
| synchronisiert einen Ausgabestream mit der tatsächlichen Datei (function) | |
| öffnet einen existierenden Stream mit einem anderen Namen (function) | |
| C-Dokumentation für fopen
| |