Namensräume
Varianten
Aktionen

std::freopen

Von cppreference.com
< cpp‎ | io‎ | c
 
 
 
C-Style I/O
Typen und Objekte
Funktionen
Datei-Zugriff
freopen
Direkte Ein-/Ausgabe
Unformatierte Ein-/Ausgabe
Formatierte Eingabe
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
 
Definiert in Header <cstdio>
std::FILE* freopen( const char* filename, const char* mode, std::FILE* stream );

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) [bearbeiten]
schließt eine Datei
(function) [bearbeiten]
C-Dokumentation für freopen