Share via


freopen, _wfreopen

Znovu přiřadí ukazatel souboru. K dispozici jsou bezpečnější verze funkcí; viz freopen_s, _wfreopen_s.

Syntaxe

FILE *freopen(
   const char *path,
   const char *mode,
   FILE *stream
);
FILE *_wfreopen(
   const wchar_t *path,
   const wchar_t *mode,
   FILE *stream
);

Parametry

path
Cesta k novému souboru.

mode
Typ povoleného přístupu.

stream
Ukazatel na FILE strukturu.

Vrácená hodnota

Každá z těchto funkcí vrátí ukazatel na nově otevřený soubor. Pokud dojde k chybě, původní soubor se zavře a funkce vrátí NULL hodnotu ukazatele. Pokud path, modenebo stream je null ukazatel, nebo pokud filename 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 NULL.

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

Poznámky

Existují bezpečnější verze těchto funkcí, viz freopen_s, _wfreopen_s.

Funkce freopen 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 je verze širokého znaku _freopen; path a mode argumenty, které mají _wfreopen být řetězce širokého znaku. _wfreopen a _freopen chovat se stejně jinak.

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 Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_tfreopen freopen freopen _wfreopen

freopen 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 Přístup
"r" Otevře se pro čtení. Pokud soubor neexistuje nebo ho nejde najít, freopen 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 <stdio.h>
_wfreopen <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.c
// compile with: /W3
// 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 )
{
   // Reassign "stderr" to "freopen.out":
   stream = freopen( "freopen.out", "w", stderr ); // C4996
   // Note: freopen is deprecated; consider using freopen_s instead

   if( stream == NULL )
      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é

Vstupně-výstupní operace streamu
fclose, _fcloseall
_fdopen, _wfdopen
_fileno
fopen, _wfopen
_open, _wopen
_setmode