freopen, _wfreopen
Znovu přiřadí ukazatel souboru.Bezpečnější verze těchto funkcí jsou k dispozici; viz freopen_s, _wfreopen_s.
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 nového souboru.mode
Typ oprávněného přístupu.stream
Ukazatel na strukturu FILE.
Vrácená hodnota
Každá z těchto funkcí vrací ukazatel na nově otevřeného souboru.Pokud dojde k chybě, původní soubor se zavře a vrátí NULL hodnotu ukazatele.Pokud path, mode, nebo stream je ukazatel s hodnotou null, nebo pokud filename je prázdný řetězec, tyto funkce vyvolat obslužnou rutinu neplatný parametr, jak je popsáno v Ověření parametru.Pokud smí provádění pokračovat, tyto funkce nastaví errno na EINVAL a vrátí NULL.
Další informace o těchto a dalších chybových kódech viz _doserrno, errno, _sys_errlist, and _sys_nerr.
Poznámky
Existují bezpečnější verze těchto funkcí naleznete v tématu freopen_s, _wfreopen_s.
freopen Funkce zavře soubor aktuálně přidružených k stream a znovu přiřadí stream do souboru určeného parametrem path*.*_wfreopen je verze širokého znaku _freopen; path a mode argumenty pro _wfreopen jsou řetězci širokého znaku._wfreopen a _freopen se jinak chovají stejně.
Rutinní mapování obecného textu
Rutina TCHAR.H |
_UNICODE & _MBCS není definováno |
_MBCS definováno |
_UNICODE definováno |
---|---|---|---|
_tfreopen |
freopen |
freopen |
_wfreopen |
freopenobvykle slouží k přesměrování dříve otevřených souborů stdin, stdout, a stderr k souborům, které zadal uživatel.Nový soubor spojený s stream se mode*,* který je znakový řetězec určující typ přístup k souboru, takto:
"r"
Otevře pro čtení.Pokud soubor neexistuje nebo nemůže být nalezen, volání freopen se nezdaří."w"
Otevře prázdný soubor pro zápis.Pokud daný soubor existuje, jeho obsah je zničen."a"
Otevře pro zápis na konci souboru (připojení) bez odstranění značky EOF před zápisem nových dat do souboru. nejprve vytvoří soubor, pokud již neexistuje."r+"
Otevře pro čtení i zápis. (Soubor musí existovat.)"w+"
Otevře prázdný soubor pro čtení i zápis.Pokud daný soubor existuje, jeho obsah je zničen."a+"
Otevře pro čtení a přidávání; ke operace zahrnuje odstranění značky EOF před nová data zapsána do souboru a značku EOF je obnoven po dokončení zápisu; nejprve vytvoří soubor, pokud již neexistuje.
Použití "w" a "w+" typy opatrně, protože zničí existující soubory.
Při otevření souboru s "a" nebo "a+" přístup k typu, všechny operace probíhají na konci souboru zapisovat.I když může být přemístí ukazatel souboru pomocí fseek nebo rewind, ukazatel souboru je vždy přesunuta zpět na konec souboru před libovolný zápis operace provádí.Proto nelze přepsat existující data.
Režim "a" neodstraní značku EOF před připojením k souboru.Po tom, co došlo k připojení, příkaz MS-DOS TYPE zobrazí pouze data do původní značky EOF, nikoliv data připojena k souboru.Režim "a+" odstraní značku EOF před připojením k souboru.Po připojení zobrazí příkaz MS-DOS TYPE všechna data v souboru.Pro soubor datového proudu, který je přerušen skrze značku EOF CTRL+Z je pro připojení vyžadován režim "a+".
Pokud je zadán přístupový typ "r+", "w+" nebo "a+", je povoleno čtení i zápis (o souboru je řečeno, že je otevřen pro "úpravy").Však při přepínání mezi čtení a zápis, musí existovat podílející se fsetpos, fseek, nebo vzad operace.Aktuální pozice lze určit pro fsetpos nebo fseek operace, v případě potřeby.Kromě výše uvedených hodnot, jeden z těchto znaků může být součástí mode řetězec, chcete-li určit režim překladu pro nové řádky.
t
Otevřít jako text (překlad) režimu; return–linefeed (CR-LF) kombinace přepravy jsou přeloženy do jeden nový řádek (LF) znaků na vstupu; Kombinace CR-LF na výstupu se přeložit znaky LF.CTRL + Z, je interpretován jako znak konce souboru na vstupu.V souborech otevřít pro čtení nebo pro zápis a čtení s "a+", knihovna run-time kontroluje CTRL + Z na konci souboru a odstraní jej, pokud je to možné.Je důvodem, že pomocí fseek a ftell může způsobit přesun v rámci souboru fseek na konci souboru fungovat správně.t Je možnost rozšíření aplikace Microsoft, které by neměly být použity, kde je žádoucí přenositelnost ANSI.b
V binárním režimu (nepřeložený); nad překlady jsou potlačeny.
Pokud není uveden t nebo b v mode, je výchozí režim překladu definován pomocí globální proměnné _fmode.Pokud je t nebo b předponou argumentu, funkce selže a vrátí NULL.
Informace o textu a binární režimy, viz textu a binární režim I/O souboru.
Požadavky
Funkce |
Požadované záhlaví |
---|---|
freopen |
<stdio.h> |
_wfreopen |
<stdio.h> nebo <wchar.h> |
Konzola není v aplikacích Windows Store podporována.Standardní datový proud popisovačů, které jsou spojeny s konzolou – stdin, stdout a stderr, musí být přesměrován před použitím funkcí jazyka C run-time je v aplikacích Windows Store.Další informace o kompatibilitě naleznete 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" );
}