Sdílet prostřednictvím


freopen_s, _wfreopen_s

Zavře soubor, který je aktuálně přidružený, oldStream a znovu přiřazuje stream k souboru určenému uživatelem fileName.

Tyto verze freopenmají _wfreopen vylepšení zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.

Syntaxe

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
);

Parametry

stream
Výstupní parametr, který bude odkazovat na znovu otevřenou stream, když funkce vrátí.

fileName
Cesta k souboru, který se má znovu otevřít.

mode
Režim znovu otevřeného datového proudu.

oldStream
Stream, který se má znovu otevřít. Jsou vyprázdněny a všechny soubory, které jsou k němu přidružené, zavřené.

Vrácená hodnota

Nula při úspěchu; jinak kód chyby. Pokud dojde k chybě, původní soubor se zavře a NULL zapíše se do stream souboru, pokud stream není také NULL

Další informace o kódech chyb naleznete v tématu errno, _doserrno, _sys_errlista _sys_nerr.

Poznámky

Funkce freopen_s se obvykle používá k připojení předem otevřených datových proudů přidružených stdinstdout k a stderr k jinému souboru.

Funkce freopen_s zavře soubor, který je aktuálně přidružený k stream souboru, a znovu ho přiřazuje stream k souboru určenému path. _wfreopen_s je verze širokého znaku freopen_s; path a mode argumenty, které mají _wfreopen_s být řetězce širokého znaku. _wfreopen_s a freopen_s chovat se stejně jinak.

Pokud některý z pFile, path, modenebo jsou NULL, nebo stream pokud path je prázdný řetězec, tyto funkce vyvolat neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud provádění může pokračovat, tyto funkce jsou nastaveny errno na EINVAL a vracet EINVAL.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Mapování rutin obecného textu

TCHAR.H rutina _UNICODE a _MBCS není definován _MBCS definovaný _UNICODE definovaný
_tfreopen_s freopen_s freopen_s _wfreopen_s

freopen_s se obvykle používá k přesměrování předem otevřených souborů stdin, stdouta stderr na soubory určené uživatelem. Nový soubor přidružený stream se otevře s řetězcem modeznaků určujícím typ přístupu požadovaného pro soubor následujícím způsobem:

mode Access
"r" Otevře se pro čtení. Pokud soubor neexistuje nebo ho nejde najít, freopen_s volání selže.
"w" Otevře prázdný soubor pro zápis. Pokud daný soubor existuje, jeho obsah se zničí.
"a" Otevře se pro zápis na konec souboru (připojování) bez odebrání značky end-of-file (EOF) před zápisem nových dat do souboru. Vytvoří soubor, pokud neexistuje.
"r+" Otevře se pro čtení i zápis. Soubor musí existovat.
"w+" Otevře prázdný soubor pro čtení i zápis. Pokud soubor existuje, jeho obsah se zničí.
"a+" Otevře se pro čtení a připojení. Operace připojení zahrnuje odebrání značky EOF před zápisem nových dat do souboru. Po dokončení zápisu se značka EOF neobnoví. Vytvoří soubor, pokud neexistuje.

"w" Tyto typy a "w+" typy používejte opatrně, protože mohou zničit existující soubory. Počínaje jazykem C11 můžete funkci připojit "x" "w" nebo "w+" způsobit selhání, pokud soubor existuje, a nemusíte ho přepisovat.

Když se soubor otevře s typem "a" přístupu nebo "a+" s typem přístupu, proběhnou všechny operace zápisu na konci souboru. I když lze ukazatel souboru přemístit pomocí fseek nebo rewind, ukazatel souboru se před provedením jakékoli operace zápisu vždy přesune zpět na konec souboru. Stávající data proto nelze přepsat.

Režim "a" před připojením k souboru neodebere značku EOF. Po připojení příkaz MS-DOS TYPE zobrazí data pouze do původní značky EOF, a ne žádná data připojená k souboru. Režim "a+" odebere značku EOF před připojením k souboru. Po připojení příkaz MS-DOS TYPE zobrazí všechna data v souboru. Režim "a+" se vyžaduje pro připojení k souboru streamu, který je ukončen značkou CTRL+Z EOF.

Je-li "r+"zadán typ přístupu , "w+"nebo "a+" čtení i zápis jsou povoleny (soubor je otevřen pro "aktualizaci"). Při přepínání mezi čtením a zápisem však musí existovat intervening fsetpos, fseeknebo rewind operace. Aktuální pozici lze zadat pro fsetpos operaci, fseek pokud chcete. Kromě výše uvedených hodnot může být mode součástí řetězce jeden z následujících znaků, který určuje režim překladu pro nové řádky.

mode modifikátor Režim překladu
t Otevřete v textovém (přeloženém) režimu.
b Otevřít v binárním (nepřekláněném) režimu; jsou potlačeny překlady zahrnující znaky návratu na začátek řádku a odřádkování.

V textovém (přeložené) režimu jsou kombinace návratového řádku řádku (CR-LF) při zadávání přeloženy do znaků jednořádkového informačního kanálu (LF). Znaky LF se při výstupu překládají na kombinace CR-LF. Příkaz CTRL+Z je na vstupu interpretován jako znak konce souboru. V souborech otevřených pro čtení nebo pro zápis a čtení pomocí "a+"knihovny runtime kontroluje ctrl+Z na konci souboru a pokud je to možné, odebere ji. Odebere se, protože použití fseek a ftell přesunutí v souboru může způsobit fseek nesprávné chování blízko konce souboru. Tuto možnost nepoužívejte t , pokud chcete přenositelnost ANSI, protože se jedná o rozšíření Microsoftu.

Pokud t nebo b není uveden v mode, je výchozí režim překladu definován globální proměnnou _fmode. Pokud t nebo b je předpona argumentu, funkce selže a vrátí .NULL

Informace o textovém a binárním režimu najdete v tématu Vstupně-výstupní operace souboru textového a binárního režimu.

Požadavky

Function Požadovaný hlavičkový soubor
freopen_s <stdio.h>
_wfreopen_s <stdio.h> nebo <wchar.h>

Konzola není podporována v aplikacích pro Univerzální platforma Windows (UPW). Standardní zpracování datových proudů, které jsou přidružené ke konzole , a , stderrmusí být přesměrovány před tím, stdinstdoutnež je funkce runtime jazyka C mohou používat v aplikacích pro UPW.

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// 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'

Viz také

Stream I/O
freopen, _wfreopen
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode