Sdílet prostřednictvím


fopen, _wfopen

Otevře soubor.Bezpečnější verze tyto funkce jsou k dispozici; Podívejte se na téma fopen_s, _wfopen_s.

FILE *fopen(     const char *filename,    const char *mode  ); FILE *_wfopen(     const wchar_t *filename,    const wchar_t *mode  );

Parametry

  • filename
    Název souboru.

  • mode
    Druh přístupu k, která je povolena.

Vrácená hodnota

Každá z těchto funkcí vrací ukazatel na otevření souboru.Hodnota ukazatele null. označuje chybu.Pokud filename nebo mode je NULL nebo prázdný řetězec, tyto funkce aktivovat obslužné rutiny neplatný parametr, který je popsán v Ověření parametru.Pokud je povolena provádění chcete-li pokračovat, tyto funkce vracejí NULL a nastavte errno k EINVAL.

Další informace naleznete v tématu errno, _doserrno, _sys_errlist, and _sys_nerr.

Poznámky

fopen Funkce otevře soubor, který je určen filename._wfopenje verze širokého znaku fopen; argumenty, které mají _wfopen jsou řetězce širokého znaku.V opačném _wfopen a fopen chovat stejně.Pouze pomocí _wfopen nemá žádný vliv na programové znaková sada, která se používá v souboru datového proudu.

fopenpřijme cesty, které jsou platné v systému souborů v okamžiku spuštění; fopen přijímá cesty UNC a cesty, které se týkají namapované síťové jednotky jako systém, který provede kód má přístup ke sdílené složce nebo mapované jednotky v okamžiku spuštění.Když vytvoříte cesty pro fopen, ujistěte se, že jednotky, cesty nebo sdílených umístění v síti bude k dispozici v prostředí pro spouštění.Můžete použít lomítka (/) nebo zpětná lomítka (\) jako oddělovače adresáře v cestě.

Vždy Zkontrolujte návratovou hodnotu, abyste viděli, zda má ukazatel hodnotu NULL, před provedením jakékoli další operace na soubor.Pokud dojde k chybě, globální proměnné errno je nastavena a mohou být používány získat informace o konkrétní chybě.Další informace naleznete v tématu errno, _doserrno, _sys_errlist, and _sys_nerr.

Podpora kódování Unicode

fopenpodporuje datové proudy soubor ve formátu Unicode.Chcete-li otevřít soubor ve formátu Unicode, předejte ccs příznak, který určuje požadovanou kódování fopen, tj.

fopen(&fp, "newfile.txt", "rt+, ccs=encoding");

Povolené hodnoty z encoding jsou UNICODE, UTF-8, a UTF-16LE.

Při otevření souboru v režimu Unicode, vstupní funkce přeložit data, která se má načíst ze souboru do UTF-16 data uložená jako typ wchar_t.Funkce, které zápis do souboru otevřít v režimu Unicode očekávané vyrovnávací paměti, které obsahují UTF-16 data uložená jako typ wchar_t.Pokud soubor s kódováním jako UTF-8 je Jakmile je zapsán a obsah kódovaný UTF-8 v souboru je přeložit na UTF-16, pokud je pro čtení dat UTF-16 přeložit na UTF-8.Pokus o čtení nebo zápis lichý počet bajtů v režimu Unicode způsobí, že chyba ověření parametru.Při čtení nebo zápisu dat, který je uložen ve svém programu jako UTF-8, použijte namísto režimu Unicode režim text nebo binární soubor.Zodpovídáte za jakékoli požadované kódování překladu.

Pokud soubor již existuje a je otevřen pro čtení nebo přidání, určuje bajtové pořadí označit (Kusovníku), pokud ho prezentovat v souboru, kódování.Kódování Kusovníku přebírá přednost kódování, který je určen ccs příznak.ccs Kódování se používá pouze pokud je přítomen žádný Kusovníku nebo soubor je nový soubor.

[!POZNÁMKA]

Detekce Kusovníku se vztahuje pouze na soubory, které jsou otevřeny v režimu Unicode (to znamená, že předávání ccs příznak).

Následující tabulka shrnuje režimů, které se používají pro různé ccs příznaky věnována fopen a bajtové pořadí značek v souboru.

Použít na základě kódování ccs příznak a jeho

ccsPříznak

Žádné Kusovníku (nebo nový soubor)

KUSOVNÍK: UTF-8

KUSOVNÍK: UTF-16

UNICODE

UTF-16LE

UTF-8

UTF-16LE

UTF-8

UTF-8

UTF-8

UTF-16LE

UTF-16LE

UTF-16LE

UTF-8

UTF-16LE

Soubory otevřené pro zápis v režimu Unicode mít Kusovník zapsána do nich automaticky.

Pokud mode je "a, ccs=<encoding>", fopen nejprve se pokusí otevřít soubor s čtení a zápis.V případě úspěšné aktivace, funkce přečte Kusovníku pro určení kódování pro soubor; Pokud tento postup selže, využívá funkce výchozí kódování pro soubor.V obou případech fopen bude poté znovu otevřete soubor s přístupem jen pro zápis.(To se vztahuje na a režimu pouze se a+ režimu.)

Mapování rutin obecného textu

Rutina TCHAR.H

_UNICODE & _MBCS není definována.

_MBCS definováno

_UNICODE definováno

_tfopen

fopen

fopen

_wfopen

Řetězec znaků mode určuje druh přístupu k, která je požadována pro soubor následujícím způsobem.

  • "r"
    Otevře pro čtení.Pokud soubor neexistuje nebo nebyl nalezen, fopen volání nezdaří.

  • "w"
    Otevře prázdný soubor pro zápis.Pokud daný soubor existuje, budou ztraceny jeho obsah.

  • "a"
    Otevře pro zápis na konci souboru (připojování) bez odebrání značku konce souboru (EOF) dříve, než je nová data zapsána do souboru.Vytvoří soubor, pokud neexistuje.

  • "r+"
    Otevře pro čtení i zápisu.Soubor musí existovat.

  • "w+"
    Otevře prázdný soubor pro čtení i zápisu.Pokud soubor existuje, budou ztraceny jeho obsah.

  • "a+"
    Otevře pro čtení a připojením.Ke operace zahrnuje odstranění značku EOF předtím, než je nová data zapsána do souboru.Značka EOF obnoveno po dokončení zápisu.Vytvoří soubor, pokud neexistuje.

Při otevření souboru s použitím "a" typ přístupu nebo "a+" přístup k typu, všechny zápisu operace dojít na konci souboru.Ukazatel na soubor může být přemístí pomocí fseek nebo rewind, ale je vždy přesunuta zpět na konec souboru před jakékoli zápisu se provádí operaci.Proto nelze přepsat stávající data.

"a" Režimu neodebere značku EOF předtím, než ji připojí k souboru.Po připojení došlo k chybě, zobrazí příkaz typu MS-DOS pouze data až do původní značky EOF a není žádná data, připojen k souboru.Předtím, než ji připojí k souboru, "a+" režimu odebrat značku EOF.Příkaz typu MS-DOS po připojení, zobrazí všechna data v souboru."a+" Režimu, je nutné připojení k souboru datového proudu, který je ukončena s značku EOF CTRL + Z.

Pokud "r+", "w+", nebo "a+" je zadán typ přístupu, jsou povoleny pro čtení i zápisu (soubor označen jako otevřené pro "update").Avšak při přepnutí z čtení k zápisu operace vstupu nastat značku EOF.Pokud není k dispozici žádné EOF, je nutné použít požadovanými volání funkce umístění souboru.Funkce umístění souboru jsou fsetpos, fseek, a rewind.Po přepnutí z zápis na čtení, je nutné použít požadovanými volání buď fflush nebo do souboru umístění funkce.

Kromě předchozí hodnoty, může být přidán následující znaky k mode k zadání překladu režimu pro znaky nového řádku.

  • t
    Otevřít v textu (přeložit) režimu.V tomto režimu CTRL + Z interpretována jako znak EOF na vstup.V souborech, které jsou otevřeny pro čtení nebo zápisu pomocí "a+", fopen kontroluje CTRL + Z na konci souboru a ji odebere, pokud je to možné.Důvodem je vzhledem k tomu, že pomocí fseek a ftell přesunout v rámci souboru, který může způsobit končí CTRL + Z fseek chování nesprávně téměř na konci souboru.

V režimu textových konce return – konce řádku kombinace jsou převedeno do jedné přečtené na vstup a konce řádku znaky jsou převedeny na konce kombinace return – konce řádku na výstup.Pokud datový proud I/O funkci Unicode funguje v režimu textu (výchozí), zdroj nebo cílový datový proud předpokládá se, že posloupnost středník.Proto Unicode datového proudu vstup funkce převést na široké znaky středník (jako Pokud voláním mbtowc funkce).Ze stejného důvodu funkce výstupní datový proud Unicode převést široké znaky na středník (jako Pokud voláním wctomb funkce).

  • b
    Otevřít v režimu binární (nepřeložený). překlady zahrnující návrat a konce řádku znaky budou potlačeny.

Pokud t nebo b není uveden v mode, je výchozí režim překladu definován globální proměnné _fmode.Pokud t nebo b je předponou argument, funkce nezdaří a vrátí hodnotu NULL.

Další informace o tom, jak používat textové a binární režimy v Unicode a více datového proudu I/O naleznete v tématu I/O soubor textového a binárního režimu a I/O proudu kódování Unicode v textovém a binárním režimu.

  • c
    Povolit příznak potvrzení pro přidruženého filename tak, aby obsah souboru vyrovnávací paměti je zapsán přímo na disk jen v případě buď fflush nebo _flushall je volána.

  • n
    Obnovit příznak potvrzení pro přidruženého filename "no-potvrzení." Toto nastavení je výchozí.Potlačí také příznak globálního potvrzení, pokud je váš program s COMMODE.OBJ propojit.Ve výchozím nastavení globálního potvrzení příznak je "no potvrzení", pokud je váš program s COMMODE explicitně propojit.OBJ. (viz Možnosti odkazů).

  • N
    Určuje, že soubor není zděděna podřízené procesy.

  • S
    Určuje, že ukládání do mezipaměti je optimalizována pro, ale nejsou omezeny na sekvenční přístup z disku.

  • R
    Určuje, že ukládání do mezipaměti je optimalizována pro, ale nejsou omezeny na náhodný přístup z disku.

  • T
    Určuje soubor jako dočasných.Pokud je to možné není vyprázdnění na disk.

  • D
    Určuje soubor jako dočasných.Odstraní se při zavření ukazatel na poslední soubor.

  • ccs=ENCODING
    Určuje programové znakové sady (UTF-8, UTF-16LE, nebo UNICODE) pro tento soubor.Pokud chcete, aby kódování ANSI ponechejte Nespecifikovaná.

Platné znaky pro mode řetězec, který se používá v fopen a _fdopen odpovídají oflag argumenty, které se používají v _až, otevřete nástroje a _sopen, tj.

Znaky v řetězci režim

Ekvivalentní oflag hodnotu pro _open/_sopen

a

_O_WRONLY | _O_APPEND (usually _O_WRONLY | _O_CREAT | _O_APPEND)

a+

_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY (usually _O_WRONLY | _O_CREAT | _O_TRUNC)

w+

_O_RDWR (usually _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

Žádná

n

Žádná

S

_O_SEQUENTIAL

R

_O_RANDOM

T

_O_SHORTLIVED

D

_O_TEMPORARY

ccs=UNICODE

_O_WTEXT

ccs=UTF-8

_O_UTF8

ccs=UTF-16LE

_O_UTF16

Pokud používáte rb režimu, není třeba port kódu a očekávají čtení většinu velký soubor nebo nejsou příslušné o výkon sítě, můžete také zvážit, zda na používání paměti mapovat Win32 soubory jako možnost.

Požadavky

Funkce

Požadovaný hlavičkový soubor

fopen

< stdio.h >

_wfopen

< stdio.h > nebo < wchar.h >

_wfopenje to rozšíření společnosti Microsoft.Další informace o kompatibilitě naleznete v tématu Kompatibilita.

The c, n, t, S, R, T, and D mode options are Microsoft extensions for fopen and _fdopen and should not be used where ANSI portability is desired.

Příklad

Následující program otevře dva soubory.Využívá fclose první soubor zavřete a _fcloseall zavřete všechny zbývající soubory.

// crt_fopen.c
// compile with: /W3
// This program opens two files. It uses
// fclose to close the first file and
// _fcloseall to close all remaining files.

#include <stdio.h>

FILE *stream, *stream2;

int main( void )
{
   int numclosed;

   // Open for read (will fail if file "crt_fopen.c" does not exist)
   if( (stream  = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996
   // Note: fopen is deprecated; consider using fopen_s instead
      printf( "The file 'crt_fopen.c' was not opened\n" );
   else
      printf( "The file 'crt_fopen.c' was opened\n" );

   // Open for write 
   if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996
      printf( "The file 'data2' was not opened\n" );
   else
      printf( "The file 'data2' was opened\n" );

   // Close stream if it is not NULL 
   if( stream)
   {
      if ( fclose( stream ) )
      {
         printf( "The file 'crt_fopen.c' was not closed\n" );
      }
   }

   // All other files are closed: 
   numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}
  

Následující program vytvoří soubor (nebo jednu přepíše, pokud existuje), v textovém režimu má kódování Unicode.Poté zapíše dva řetězce do souboru a zavře soubor.Výstup je soubor s názvem _wfopen_test.xml, která obsahuje data z části výstupu.

// crt__wfopen.c
// compile with: /W3
// This program creates a file (or overwrites one if
// it exists), in text mode using Unicode encoding.
// It then writes two strings into the file
// and then closes the file.
 
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <wchar.h>

#define BUFFER_SIZE 50

int main(int argc, char** argv)
{
wchar_t str[BUFFER_SIZE];
size_t  strSize;
FILE*   fileHandle;

    // Create an the xml file in text and Unicode encoding mode.
    if ((fileHandle = _wfopen( L"_wfopen_test.xml",L"wt+,ccs=UNICODE")) == NULL) // C4996
    // Note: _wfopen is deprecated; consider using _wfopen_s instead
    {
        wprintf(L"_wfopen failed!\n");
        return(0);
    }

    // Write a string into the file.
    wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"<xmlTag>\n");
    strSize = wcslen(str);
    if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
    {
        wprintf(L"fwrite failed!\n");
    }

    // Write a string into the file.
    wcscpy_s(str, sizeof(str)/sizeof(wchar_t), L"</xmlTag>");
    strSize = wcslen(str);
    if (fwrite(str, sizeof(wchar_t), strSize, fileHandle) != strSize)
    {
        wprintf(L"fwrite failed!\n");
    }

    // Close the file.
    if (fclose(fileHandle))
    {
        wprintf(L"fclose failed!\n");
    }
    return 0;
}

Ekvivalent v rozhraní .NET Framework

Viz také

Referenční dokumentace

I/O proudu

Výklad sekvencí vícebajtových znaků

fclose, _fcloseall

_fdopen, _wfdopen

ferror

_fileno

freopen, _wfreopen

_open, _wopen

_setmode

_sopen, _wsopen