freopen_s, _wfreopen_s

Schließt die aktuell zugeordnete oldStreamstream Datei und weist sie der durch fileName.

Diese Versionen von freopen, _wfreopen verfügen über Sicherheitsverbesserungen, wie in sicherheitsfeatures im CRT beschrieben.

Syntax

errno_t freopen_s(
   FILE ** stream,
   const char * fileName,
   const char * mode,
   FILE* oldStream
);

errno_t _wfreopen_s(
   FILE ** stream,
   const wchar_t * fileName,
   const wchar_t * mode,
   FILE * oldStream
);

Parameter

stream
Ein Out-Parameter, der auf den erneut geöffneten Datenstrom zeigt, wenn die Funktion zurückgegeben wird.

fileName
Pfad der erneut zu öffnenden Datei.

mode
Der Modus für den erneut geöffneten Datenstrom.

oldStream
Der datenstrom, der erneut geöffnet werden soll. Sie wird geleert, und alle damit verbundenen Dateien werden geschlossen.

Rückgabewert

Null bei Erfolg; andernfalls ein Fehlercode. Wenn ein Fehler auftritt, wird die originale Datei geschlossen und NULL auf stream diese geschrieben, es sei denn stream , es wird auch NULL

Weitere Informationen zu Fehlercodes finden Sie unter errno, , _doserrno, _sys_errlistund ._sys_nerr

Hinweise

Die freopen_s Funktion wird in der Regel verwendet, um die vorab geöffneten Datenströme anzufügen, die mit einer stdoutstderr anderen Datei verknüpft sindstdin.

Die freopen_s Funktion schließt die aktuell zugeordnete stream Datei und weist stream sie der durch path. _wfreopen_s ist eine Breitzeichenversion von freopen_s. Die path und mode Argumente für _wfreopen_s sind Zeichenfolgen mit Breitzeichen. _wfreopen_s und freopen_s verhalten sich andernfalls identisch.

Wenn eines von pFile, path, mode, oder stream wenn es pathNULLsich 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 EINVAL zurück.

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_s freopen_s freopen_s _wfreopen_s

freopen_s 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_s 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_s <stdio.h>
_wfreopen_s <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_s.c
// 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 )
{
   errno_t err;
   // Reassign "stderr" to "freopen.out":
   err = freopen_s( &stream, "freopen.out", "w", stderr );

   if( err != 0 )
      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 I/O
freopen, _wfreopen
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode