Namespaces
Variants

std:: freopen

From cppreference.net
< cpp ‎ | io ‎ | c
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