freopen_s
, _wfreopen_s
Schließt die aktuell zugeordnete oldStream
stream
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_errlist
und ._sys_nerr
Hinweise
Die freopen_s
Funktion wird in der Regel verwendet, um die vorab geöffneten Datenströme anzufügen, die mit einer stdout
stderr
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 path
NULL
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 EINVAL
zurück.
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_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 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_s |
<stdio.h> |
_wfreopen_s |
<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_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