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, modeoder 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_errlistund _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. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the CRT.

Generische Textroutinzuordnungen

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 rewindneu 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, fseekoder 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 modewird, wird der Standardübersetzungsmodus durch die globale Variable _fmodedefiniert. Wenn dem Argument t oder b vorangestellt wird, schlägt die Funktion fehl und gibt NULLzurü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 Universelle Windows-Plattform -Apps (UWP) nicht unterstützt. Die Standardstreamhandles, die der Konsole zugeordnet sind, stdinstdoutund stderrmüssen umgeleitet werden, bevor C-Laufzeitfunktionen sie in UWP-Apps verwenden 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