std::freopen
| Definiert in Header <cstdio> |
||
Versucht zuerst, die Datei, die mit stream verknüpft ist, zu schließen und ignoriert dabei alle Fehler. Dann, wenn filename nicht null ist, versucht es, die von filename spezifizierte Datei mit mode zu öffnen, als ob dies mit std::fopen geschehen wäre, und verknüpft diese Datei mit dem von stream gezeigten Dateistream. Wenn filename ein Nullzeiger ist, versucht die Funktion, die bereits mit stream verknüpfte Datei neu zu öffnen (welche Modifikationsänderungen in diesem Fall zulässig sind, ist implementierungsabhängig).
Inhalt |
[edit] Parameter
| filename | - | Dateiname, dem der Dateistream zugeordnet werden soll |
| mode | - | null-terminierter Zeichenstring, der den neuen Dateizugriffsmodus bestimmt |
| stream | - | der zu modifizierende Dateistream |
[edit] Dateizugriffsmodi
| 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 einen 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 einen 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 Auswirkung auf POSIX-Systeme, deaktiviert aber auf Windows beispielsweise die Sonderbehandlung 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 zwingt die Funktion zum Fehlschlagen, 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). | ||||
[edit] Rückgabewert
stream bei Erfolg, ein Nullzeiger bei Fehler.
[edit] Hinweise
std::freopen ist die einzige Möglichkeit, die für schmale/breite Zeichen ausgelegte Ausrichtung eines Streams zu ändern, sobald diese durch eine E/A-Operation oder durch std::fwide festgelegt wurde.
Die Microsoft CRT-Version von std::freopen unterstützt keine Modifikationsänderungen, wenn filename ein Nullzeiger ist und behandelt dies als Fehler (siehe Dokumentation). Eine mögliche Abhilfe ist die nicht standardmäßige Funktion _setmode().
[edit] Beispiel
Der folgende Code leitet stdout in eine Datei um.
#include <cstdio> int main() { std::printf("stdout is printed to console\n"); if (std::freopen("redir.txt", "w", stdout)) { std::printf("stdout is redirected to a file\n"); // this is written to redir.txt std::fclose(stdout); } }
Ausgabe
stdout is printed to console
[edit] Siehe auch
| öffnet eine Datei (function) | |
| schließt eine Datei (function) | |
| C-Dokumentation für freopen
| |