Freigeben über


freopen_s, _wfreopen_s

Weist einen Dateizeiger neu zu. Diese Versionen von freopen, _wfreopen enthalten Sicherheitserweiterungen, die unter Sicherheitsfunktionen in der CRT beschrieben sind.

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 vom Aufruf bereitzustellenden Dateizeiger.

  • [in] path
    Pfad der neuen Datei.

  • [in] mode
    Zugriffstyp zulässig.

  • [in] stream
    Zeiger zur FILE-Struktur.

Rückgabewert

Jede dieser Funktionen gibt einen Fehlercode zurück. Wenn ein Fehler auftritt, wird die ursprüngliche Datei geschlossen.

Hinweise

The freopen_s-Funktion schließt die derzeit stream zugeordnete Datei und weist stream der durch path. angegebenen Datei erneut zu. _wfreopen_s ist eine Breitzeichenversion von _freopen_s. Die Argumente path und mode für _wfreopen_s sind Zeichenfolgen mit Breitzeichen. _wfreopen_s und _freopen_s verhalten sich andernfalls identisch.

Wenn eines der Argumente pFile, path, mode oder stream den Wert NULL aufweist oder path eine leere Zeichenfolge ist, dann rufen diese Funktionen den Handler für ungültige Parameter auf, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, stellen diese Funktionen errno auf EINVAL ein und geben EINVAL zurück.

Zuordnung generischer 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 bereits geöffneten Dateien stdin, stdout und stderr zu den vom Benutzer angegebenen Dateien umzuleiten. Die neue Datei, die stream zugeordnet ist, wird mit mode geöffnet. Dabei handelt es sich um eine Zeichenfolge, die den für die Datei angeforderten Zugriffstyp wie folgt angibt:

  • "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"
    Öffnet zum Schreiben (Anhängen), ohne dass vor dem Schreiben neuer Daten in die Datei die EOF-Markierung entfernt wird. Falls die Datei nicht vorhanden ist, wird sie erstellt.

  • "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 angegebene Datei vorhanden ist, wird ihr Inhalt zerstört.

  • "a+"
    Öffnet zum Lesen und Anfügen. Beim Anfügevorgang wird vor dem Schreiben neuer Daten in die Datei die EOF-Markierung entfernt und nach Abschluss des Schreibvorgangs wiederhergestellt. Falls die Datei nicht vorhanden ist, wird sie erstellt.

Die Typen "w" und "w+" sind mit Vorsicht zu verwenden, da sie vorhandene Dateien zerstören können.

Bei einer mit dem Zugriffstyp "a" oder "a+" geöffneten Datei erfolgen alle Schreibvorgänge am Ende der Datei. Obwohl der Dateizeiger mithilfe von fseek oder rewind neu positioniert werden kann, wird der Dateizeiger immer wieder an das Ende der Datei verschoben, bevor ein Schreibvorgang durchgeführt wird. Folglich können vorhandene Daten nicht überschrieben werden.

Bei dem Modus "a" wird die EOF-Markierung nicht entfernt, bevor Daten an die Datei angefügt werden. 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 "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, muss ein sich dazwischen befindender Vorgang wie fsetpos, fseek oder rewind vorhanden sein. Bei Bedarf kann die aktuelle Position für den Vorgang fsetpos oder fseek 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.

  • t
    Öffnet im (übersetzten) Textmodus. Wagenrücklauf-/Zeilenvorschub(CR-LF)-Kombinationen werden bei der Eingabe in einzelne Zeilenvorschubszeichen (LF-Zeichen) übersetzt. LF-Zeichen werden bei der Ausgabe in CR-LF-Kombinationen ü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. Dies geschieht, da ein Verwenden von fseek und ftell zum Navigieren innerhalb der Datei dazu führen kann, dass sich fseek in der Nähe von Dateiende nicht ordnungsgemäß verhält. Die t-Option ist eine Microsoft-Erweiterung, die bei einer gewünschten ANSI-Portabilität nicht verwendet werden sollte.

  • b
    Öffnet im (unübersetzten) Binärmodus; die oben genannten Übersetzungen werden unterdrückt.

Wenn t oder b nicht in mode angegeben ist, 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 Erörterung von Text- und Binärmodi finden Sie unter Text- und Binärmodus-Datei-E/A.

Anforderungen

Funktion

Erforderlicher Header

freopen_s

<stdio.h>

_wfreopen_s

<stdio.h> oder <wchar.h>

Die Konsole wird in Windows Store-Apps nicht unterstützt. Die mit der Konsole verknüpften Standardstreamhandles, stdin, stdout und stderr, müssen umgeleitet werden, bevor sie von C-Laufzeitfunktionen in Windows Store-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" );
}
  

.NET Framework-Entsprechung

Siehe auch

Referenz

Stream-E/A

freopen, _wfreopen

fclose, _fcloseall

_fdopen, _wfdopen

_fileno

fopen, _wfopen

_open, _wopen

_setmode