freopen_s, _wfreopen_s
Weisen Sie einen Dateizeiger neu zu.Diese sind Versionen von freopen, _wfreopen mit Sicherheitserweiterungen, wie in Sicherheitsfeatures im CRT beschrieben.
errno_t freopen( FILE** pFile, const char *path, const char *mode, FILE *stream ); errno_t _wfreopen( FILE** pFile, const wchar_t *path, const wchar_t *mode, FILE *stream );
Parameter
[out] pFile
Ein Zeiger auf den Aufruf bereitgestellt werden, Dateizeiger.[in] path
Pfad der neuen Datei.[in] mode
Typ des Zugriffs zulässig.[in] stream
Zeiger auf FILE-Struktur.
Rückgabewert
Jede dieser Funktionen gibt einen Fehlercode zurück.Wenn ein Fehler auftritt, wird die ursprüngliche Datei geschlossen.
Hinweise
Die freopen_s-Funktion enthält die Datei, die gerade stream zugeordnet ist und weist stream zur Datei erneut zu, die von path._wfreopen_s angegeben wird, ist eine Breitzeichen-Version von _freopen_s; die path und mode-Argumente zu _wfreopen_s sind Breitzeichen-Zeichenfolgen._wfreopen_s und _freopen_s verhalten sich andernfalls identisch.
Wenn eine der pFile, sind path, mode oder streamNULL, oder, wenn path eine leere Zeichenfolge ist, rufen diese Funktionen den ungültigen Parameterhandler auf, wie in Parametervalidierung beschrieben.Wenn die Ausführung zulässig ist, um fortzufahren, legen diese Funktionen errno auf EINVAL fest und geben EINVAL zurück.
Zuordnung generische Textroutinen
TCHAR.H-Routine |
_UNICODE & _MBCS nicht definiert. |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tfreopen_s |
freopen_s |
freopen_s |
_wfreopen_s |
freopen_s wird normalerweise verwendet, um die vor-geöffneten Dateien stdin, stdout und stderr auf Dateien umzuleiten, die vom Benutzer angegeben werden.Die neue Datei, die mit stream zugeordnet ist, ist mit mode*,* die eine Zeichenfolge ist, die den Typ des Zugriffs angefordert für die Datei angibt, wie folgt geöffnet:
"r"
Der wird zum Lesen.Wenn die Datei nicht vorhanden ist oder nicht gefunden werden kann, schlägt der Aufruf freopen_s aus."w"
Öffnet eine leere Datei zum Schreiben.Wenn die angegebene Datei vorhanden ist, wird der Inhalt zerstört."a"
Vor dem Schreiben von neuen Daten geöffnet zum Schreiben am Ende der Datei (Anfügen) ohne den EOF-Marker, die Datei zu entfernen; erstellt die Datei zuerst, wenn sie nicht vorhanden ist."r+"
Der wird für das Lesen und Schreiben.(Die Datei muss vorhanden sein.)"w+"
Öffnet eine leere Datei für das Lesen und Schreiben.Wenn die angegebene Datei vorhanden ist, wird der Inhalt zerstört."a+"
Der wird zum Lesen und das Anfügen; der anfügende Vorgang umfasst das Entfernen des EOF-Markers, bevor neue Daten in die Datei geschrieben werden und der EOF-Marker wiederhergestellt wird, nachdem das Schreiben vollständig ist, erstellt die Datei zuerst, wenn sie nicht vorhanden ist.
Verwenden Sie die "w" und "w+"-Typen sorgfältig, wie sie vorhandene Dateien zerstören können.
Wenn eine Datei mit dem "a" oder "a+" Zugriffstyp geöffnet ist, werden alle Schreibvorgänge am Ende der Datei statt.Obwohl der Dateizeiger mithilfe fseek oder rewind neu angeordnet werden kann, wird der Dateizeiger immer wieder am Ende der Datei verschoben, bevor ein Schreibvorgang durchgeführt wird.Daher können vorhandene Daten nicht überschrieben werden.
Der "a" Modus entfernt den EOF-Marker nicht, bevor er zur Datei angefügt.Nach dem Hinzufügen, aufgetreten ist, zeigt der MS-DOS TYPbefehl nur Daten bis auf die Markierung der Vorlage EOF und keine Daten, die an die Datei angefügt werden.Der "a+" Modus entfernt den EOF-Marker, bevor er zur Datei angefügt.Nach dem angefügt hat zeigt der MS-DOS TYPbefehl alle Daten in der Datei an.Der "a+" Modus ist für das Anfügen an eine Streamdatei erforderlich, die mit dem Markierung STRG+Zs EOF beendet wird.
Wenn "r+","w+", oder "a+" Zugriffstyp, angegeben wird, wird das Lesen und Schreiben zulässt (die Datei soll für "Update" geöffnet).Wenn Sie jedoch zwischen Lesen und Schreiben wechseln, es dazwischenliegendes fsetpos, fseek oder Rückspulen Vorgang geben müssen.Die aktuelle Position kann für den fsetpos oder fseek Vorgang angegeben werden, wenn dies erforderlich ist.Zusätzlich zu den oben aufgeführten Werten wird möglicherweise eine der folgenden Zeichen in der Zeichenfolge mode enthalten, um den Übersetzungsmodus für neue Zeilen anzugeben.
t
Öffnen Sie im Modus des Texts (übersetzt); Kombinationen von Wagenrücklauf/Zeilenvorschubs (CR-LF) werden in einzelne Zeichen des Zeilenvorschubs (Zeilenvorschub) auf Eingabe übersetzt; Zeilenvorschubzeichen werden zu CR-LF Kombinationen auf Ausgabe übersetzt.Außerdem STRG+Z wird als Dateiendezeichen auf Eingabe interpretiert.In den Dateien, die zum Lesen oder zum Schreiben und Lesen mit "a+" geöffnet sind, entfernt die Laufzeitbibliotheksüberprüfungen für STRG+Z am Ende der Datei und sie, sofern möglich.Dies geschieht, da die Anwendung möglicherweise von fseek und von ftell, sich innerhalb einer Datei zu navigieren fseek bewirkt, dass sich neben dem Ende der Datei nicht ordnungsgemäß verhält.Die Option t ist eine Microsoft-Erweiterung, die nicht verwendet werden sollte, wo ANSI-Portabilität erforderlich ist.b
Öffnen Sie im binären (unübersetzten) Modus; die oben genannten Übersetzungen werden unterdrückt.
Wenn t oder b nicht in mode angegeben ist, wird der Standardwert Übersetzungsmodus durch die globale Variable _fmode definiert.Wenn t oder b das Argument vorangestellt wird, lässt die Funktion und gibt NULL zurück.
Eine Erläuterung Text- und Binärdateimodi, finden Sie unter Text- Binärdatei-Modus Datei E/A.
Anforderungen
Funktion |
Erforderlicher Header |
---|---|
freopen_s |
<stdio.h> |
_wfreopen_s |
<stdio.h> oder <wchar.h> |
Die Konsole wird nicht in Windows Store-App unterstützt.Die Standardstreamhandles, die mit der Konsole, stdin, stdout und stderr zugeordnet werden, müssen umgeleitet werden, bevor sie C-Laufzeitfunktionen in Windows Store-App verwenden können.So zusätzlicher Kompatibilitätsinformation finden Sie unter Kompatibilität in der Einführung.
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" );
}
.NET Framework-Entsprechung
System::IO::FileStream::FileStream