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
, mode
nebo 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_errlist
a _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 rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopen
se obvykle používá k přesměrování předem otevřených souborů stdin
, stdout
a stderr
na soubory určené uživatelem. Nový soubor přidružený stream
se otevře s řetězcem mode
znaků 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 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
, fseek
nebo 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 , stderr
musí být přesměrovány před tím, stdin
stdout
než 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