std:: freopen
|
Definiert im Header
<cstdio>
|
||
|
std::
FILE
*
freopen
(
const
char
*
filename,
const
char
*
mode,
std::
FILE
*
stream
)
;
|
||
Zuerst wird versucht, die mit stream assoziierte Datei zu schließen, wobei etwaige Fehler ignoriert werden. Dann, falls filename nicht null ist, wird versucht, die durch filename spezifizierte Datei mit mode zu öffnen, als ob durch std::fopen , und diese Datei mit dem durch stream angegebenen Dateistrom zu assoziieren. Wenn filename ein Nullzeiger ist, dann versucht die Funktion, die bereits mit stream assoziierte Datei erneut zu öffnen (es ist implementierungsdefiniert, welche Modusänderungen in diesem Fall erlaubt sind).
Inhaltsverzeichnis |
Parameter
| filename | - | Dateiname, der dem Dateistrom zugeordnet werden soll |
| mode | - | Null-terminierte Zeichenkette, die den neuen Dateizugriffsmodus bestimmt |
| stream | - | der zu modifizierende Dateistrom |
Dateizugriffsflags
|
Dateizugriffsmodus-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 Fehler |
| "w" | write | Datei zum Schreiben erstellen | Inhalt zerstören | Neue Datei erstellen |
| "a" | append | An Datei anhängen | Schreiben am Ende | Neue Datei erstellen |
| "r+" | read extended | Datei zum Lesen/Schreiben öffnen | Lesen ab Anfang | gibt NULL zurück und setzt Fehler |
| "w+" | write extended | Datei zum Lesen/Schreiben erstellen | Inhalt zerstören | Neue Datei erstellen |
| "a+" | append extended | Datei zum Lesen/Schreiben öffnen | Schreiben am Ende | Neue Datei erstellen |
|
Dateizugriffsmodus-Flag
"b"
kann optional angegeben werden, um eine Datei
im Binärmodus
zu öffnen. Dieses Flag hat keine Auswirkung auf POSIX-Systemen, aber unter Windows deaktiviert es beispielsweise die spezielle Behandlung von
'
\n
'
und
'
\x1A
'
.
Bei den Anhänge-Zugriffsmodi werden Daten unabhängig von der aktuellen Position des Dateipositionsindikators am Ende der Datei geschrieben. |
||||
| Dateizugriffsmodus-Flag "x" kann optional an "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 nicht einer der oben aufgeführten Strings ist. Einige Implementierungen definieren zusätzlich unterstützte Modi (z.B. Windows ). | ||||
Rückgabewert
stream bei Erfolg, ein Nullzeiger bei Fehler.
Hinweise
std::freopen ist die einzige Möglichkeit, die Schmal-/Breitorientierung eines Streams zu ändern, nachdem sie durch einen E/A-Vorgang oder durch std::fwide festgelegt wurde.
Die Microsoft CRT-Version von
std::freopen
unterstützt keine Modusänderungen, wenn
filename
ein Nullzeiger ist und behandelt dies als Fehler (siehe
Dokumentation
). Eine mögliche Problemumgehung ist die nicht-standardisierte Funktion
_setmode()
.
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
Siehe auch
|
öffnet eine Datei
(Funktion) |
|
|
schließt eine Datei
(Funktion) |
|
|
C-Dokumentation
für
freopen
|
|