freopen
, _wfreopen
Weist einen Dateizeiger neu zu. Sicherere Versionen der Funktionen sind verfügbar; siehe freopen_s
, _wfreopen_s
.
Syntax
FILE *freopen(
const char *path,
const char *mode,
FILE *stream
);
FILE *_wfreopen(
const wchar_t *path,
const wchar_t *mode,
FILE *stream
);
Parameter
path
Pfad der neuen Datei.
mode
Zugriffstyp zulässig.
stream
Zeiger zur FILE
-Struktur.
Rückgabewert
Jede dieser Funktionen gibt einen Zeiger an die gerade geöffnete Datei zurück. Wenn ein Fehler auftritt, wird die ursprüngliche Datei geschlossen, und die Funktion gibt einen NULL
Zeigerwert zurück. Wenn path
, mode
oder stream
ist ein Nullzeiger oder wenn filename
es sich um eine leere Zeichenfolge handelt, rufen diese Funktionen den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, stellen diese Funktionen errno
auf EINVAL
ein und geben NULL
zurück.
Weitere Informationen zu Fehlercodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Sicherere Versionen dieser Funktionen sind vorhanden, siehe freopen_s
, _wfreopen_s
.
Die freopen
Funktion schließt die aktuell zugeordnete stream
Datei und weist stream
sie der durch path
. _wfreopen
ist eine Breitzeichenversion von _freopen
. Die path
und mode
Argumente für _wfreopen
sind Zeichenfolgen mit Breitzeichen. _wfreopen
und _freopen
verhalten sich andernfalls identisch.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Mapping generischer Textroutinen
TCHAR.H -Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopen
wird normalerweise verwendet, um die bereits geöffneten Dateien stdin
, stdout
und stderr
zu den vom Benutzer angegebenen Dateien umzuleiten. Die neue Datei, die der Datei zugeordnet stream
ist, wird geöffnet mode
. Dies ist eine Zeichenfolge, die den Für die Datei angeforderten Zugriffstyp angibt:
mode |
Access |
---|---|
"r" |
Öffnet zum Lesen. Wenn die Datei nicht vorhanden ist oder nicht gefunden werden kann, schlägt der freopen Aufruf fehl. |
"w" |
Öffnet eine leere Datei zum Schreiben. Wenn die angegebene Datei vorhanden ist, wird ihr Inhalt zerstört. |
"a" |
Wird vor dem Schreiben neuer Daten in die Datei zum Schreiben am Ende der Datei (Anfügen) geöffnet, ohne die EOF-Markierung (end-of-file, Dateiende) zu entfernen. Erstellt die Datei, wenn sie nicht vorhanden ist. |
"r+" |
Öffnet sowohl zum Lesen als auch zum Schreiben. Die Datei muss vorhanden sein. |
"w+" |
Öffnet eine leere Datei zum Lesen und Schreiben. Wenn die Datei vorhanden ist, wird ihr Inhalt zerstört. |
"a+" |
Öffnet sich zum Lesen und Anfügen. Der Anfügevorgang umfasst das Entfernen der EOF-Markierung, bevor neue Daten in die Datei geschrieben werden. Die EOF-Markierung wird nach Abschluss des Schreibens nicht wiederhergestellt. Erstellt die Datei, wenn sie nicht vorhanden ist. |
Die Typen "w"
und "w+"
sind mit Vorsicht zu verwenden, da sie vorhandene Dateien zerstören können. Ab C11 können Sie anfügen "x"
"w"
oder "w+"
dazu führen, dass die Funktion fehlschlägt, wenn die Datei vorhanden ist, anstatt sie zu überschreiben.
Bei einer mit dem Zugriffstyp "a"
oder "a+"
geöffneten Datei erfolgen alle Schreibvorgänge am Ende der Datei. Obwohl der Dateizeiger mithilfe fseek
oder rewind
neu positioniert werden kann, wird der Dateizeiger immer wieder an das Ende der Datei verschoben, bevor ein Schreibvorgang ausgeführt wird. Daher können vorhandene Daten nicht überschrieben werden.
Der "a"
Modus entfernt die EOF-Markierung vor dem Anfügen an die Datei nicht. Nach dem Anfügen werden durch den MS-DOS-Befehl TYPE nur Daten bis zur ursprünglichen EOF-Markierung angezeigt, aber keine Daten, die an die Datei angefügt wurden. Bei dem Modus "a+"
wird die EOF-Markierung entfernt, bevor Daten an die Datei angefügt werden. Nach dem Anhängen werden mit dem Befehl MS-DOS TYPE alle Daten in der Datei angezeigt. Der Modus "a+"
ist für das Anfügen von Daten an eine Streamdatei erforderlich, die mit der EOF-Markierung STRG+Z beendet wird.
Wenn als Zugriffstyp "r+"
, "w+"
oder "a+"
angegeben wird, sind sowohl Lese- als auch Schreibvorgänge zulässig (die Datei ist zum Aktualisieren geöffnet). Wenn Sie jedoch zwischen Lese- und Schreibzugriff wechseln, muss es einen dazwischen liegenden fsetpos
, fseek
oder rewind
Vorgang geben. Die aktuelle Position kann bei Bedarf für den Vorgang oder fseek
den fsetpos
Vorgang angegeben werden. Zusätzlich zu den oben aufgeführten Werten kann eines der folgenden Zeichen in der mode
-Zeichenfolge enthalten sein, um den Übersetzungsmodus für neue Zeilen anzugeben.
mode -Modifizierer |
Übersetzungsmodus |
---|---|
t |
Öffnen im Textmodus (übersetzt). |
b |
Im Binärmodus (nicht translatiert) öffnen; Übersetzungen mit Wagenrücklauf- und Zeilenvorschubzeichen werden unterdrückt. |
Im Textmodus (übersetzt) werden Wagenrücklauflinieneinzugskombinationen (CR-LF) in Einfügezeichen (Single Line Feed, LF) bei der Eingabe übersetzt; LF-Zeichen werden in CR-LF-Kombinationen für die Ausgabe übersetzt. Außerdem wird STRG+Z bei der Eingabe als EOF-Zeichen interpretiert. In den Dateien, die für Lese- oder Lese- und Schreibvorgänge mit "a+"
geöffnet sind, prüft die Laufzeitbibliothek, ob am Ende der Datei STRG+Z vorhanden ist, und entfernt ggf. diesen Wert. Sie wird entfernt, da die Verwendung fseek
und ftell
das Verschieben in einer Datei dazu führen fseek
kann, dass sich das Verhalten am Ende der Datei nicht ordnungsgemäß verhält. Verwenden Sie die t
Option nicht, wenn Sie ANSI-Portabilität benötigen, da es sich um eine Microsoft-Erweiterung handelt.
Wenn t
oder b
nicht angegeben mode
wird, wird der Standardübersetzungsmodus durch die globale Variable _fmode
definiert. Wenn dem Argument t
oder b
vorangestellt wird, schlägt die Funktion fehl und gibt NULL
zurück.
Eine Erläuterung der Text- und Binärmodi finden Sie unter "Text- und Binärmodusdatei-E/A".
Anforderungen
Funktion | Erforderlicher Header |
---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> oder <wchar.h> |
Die Konsole wird in UWP-Apps (Universelle Windows-Plattform) nicht unterstützt. Die mit der Konsole verknüpften Standardstreamhandles stdin
, stdout
und stderr
müssen umgeleitet werden, bevor sie von C-Laufzeitfunktionen in UWP-Apps verwendet werden können. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_freopen.c
// compile with: /W3
// This program reassigns stderr to the file
// named FREOPEN.OUT and writes a line to that file.
#include <stdio.h>
#include <stdlib.h>
FILE *stream;
int main( void )
{
// Reassign "stderr" to "freopen.out":
stream = freopen( "freopen.out", "w", stderr ); // C4996
// Note: freopen is deprecated; consider using freopen_s instead
if( stream == NULL )
fprintf( stdout, "error on freopen\n" );
else
{
fprintf( stdout, "successfully reassigned\n" ); fflush( stdout );
fprintf( stream, "This will go to the file 'freopen.out'\n" );
fclose( stream );
}
system( "type freopen.out" );
}
successfully reassigned
This will go to the file 'freopen.out'
Siehe auch
Stream-E/A
fclose
, _fcloseall
_fdopen
, _wfdopen
_fileno
fopen
, _wfopen
_open
, _wopen
_setmode