Sdílet prostřednictvím


fopen _wfopen

Otevře soubor.Bezpečnější verze tyto funkce jsou k dispozici; see 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, který je povolen.

Vrácená hodnota

Každá z těchto funkcí vrací ukazatel na otevřený soubor.Hodnota ukazatele null označuje chybu.Pokud filename nebo mode je NULL nebo prázdný řetězec, tyto funkce spustí obslužnou rutinu neplatný parametr, který je popsán v Ověření parametrů.Pokud je povoleno zpracování, chcete-li pokračovat, tyto funkce vracejí NULL a errno na EINVAL.

Další informace naleznete v tématu Kód chyby, _doserrno, _sys_errlist a _sys_nerr.

Poznámky

fopen Funkce otevře soubor, který je určen filename._wfopenje verzí širokého znaku fopen; argumenty pro _wfopen jsou řetězci širokého znaku.V opačném případě se _wfopen a fopen chovat identicky.Pouze pomocí _wfopen nemá žádný vliv na kódované znakovou sadu, která se používá v souboru datového proudu.

fopenpřijímá cesty, které jsou platné v systému souborů místě provádění; fopenpřijímá cesty UNC cesty, které se týkají namapované síťové jednotky, tak dlouho, dokud systém, který spustí kód má přístup ke sdílené položce a mapované jednotky v době spuštění.Při vytvoření cesty k fopen, ujistěte se, že jednotky, cesty nebo síťové sdílené položky bude k dispozici v prostředí pro spouštění.Lomítka (/) nebo zpětná lomítka (\) lze použít jako oddělovače adresáře v cestě.

Vždy zkontrolujte vrácenou hodnotu, chcete-li zjistit, zda má ukazatel hodnotu NULL, před provedením jakékoli další operace na souboru.Pokud dojde k chybě, globální proměnné errno je nastavena a může být použit k získání informací o konkrétní chybě.Další informace naleznete v tématu Kód chyby, _doserrno, _sys_errlist a _sys_nerr.

Podpora kódování Unicode

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

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

Allowed values of encoding are UNICODE, UTF-8, and UTF-16LE.

Pokud soubor již existuje a je otevřen pro čtení nebo připojením, Byte pořadí značka (BOM), je-li prezentovat v souboru, určuje kódování.Kódování Kusovníku přednost přes kódování, který je určen ccs příznak.ccs Kódování se používá pouze v případě, že je k dispozici žádné Kusovníku a soubor je nový soubor.

[!POZNÁMKA]

Detekce Kusovníku se vztahuje pouze na soubory, které jsou otevírány v režimu podporujícím kódování Unicode (to znamená po předání ccs příznak).

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

Kódování použité na základě ccs příznak a Kusovníku

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 psaní v režimu podporujícím kódování Unicode mají Kusovníku automaticky zapisovat na ně.

Pokud mode je "a, ccs=<encoding>", fopen nejprve pokusí otevřít soubor pro čtení a zápis.Pokud se to podaří funkci přečte Kusovníku k určení kódování souboru; Pokud to nepomůže, využívá funkce výchozí kódování souboru.V obou případech fopen bude znovu otevřít soubor s přístupem jen pro zápis.(To platí pro a režimu pouze, aby a+ režimu.)

Mapování rutiny obecného textu

TCHAR.Byla zahájena rutina h

_UNICODE & _MBCS není definováno

_MBCS, definice

_UNICODE definována

_tfopen

fopen

fopen

_wfopen

Řetězec znaků mode Určuje typ přístupu, který je požadováno pro soubor, takto.

  • "r"
    Otevře pro čtení.Pokud soubor neexistuje nebo nemůže být nalezen fopen volání se nezdaří.

  • "w"
    Otevře prázdný soubor pro zápis.Je-li daný soubor existuje, jeho obsah jsou zničeny.

  • "a"
    Otevře se pro zápis na konci souboru (připojení), aniž byste odebrali značku konce souboru (EOF) před zapsáním nových dat do souboru.V případě, že neexistuje, vytvoří se soubor.

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

  • "w+"
    Otevře prázdný soubor pro čtení i zápis.Pokud soubor existuje, jeho obsah jsou zničeny.

  • "a+"
    Otevře pro čtení a přidávání.Operace připojení zahrnuje odstranění značku EOF před zapsáním nových dat do souboru.Značka konce souboru není obnovena po dokončení zápisu.V případě, že neexistuje, vytvoří se soubor.

Při otevření souboru pomocí "a" přístupu k typu nebo "a+" přístupu k typu, všechny zapisovat operací dojít na konci souboru.Ukazatel souboru můžete přemístit pomocí fseek nebo rewind, ale vždy přesunuta zpět do konce souboru před libovolné zápis operace provádí.Proto nelze přepsat existující data.

"a" Režimu předtím, než se připojí k souboru neodebere značku EOF.Poté, co došlo k připojení, příkaz systému MS-DOS TYPE zobrazí pouze data do původní značku EOF a ne všechna data přidána do souboru.Předtím, než se připojí k souboru, "a+" režimu odebrat značku EOF.Po připojení, zobrazí příkaz systému MS-DOS zadejte všechna data v tomto souboru."a+" Režim je vyžadován pro přidávání soubor datového proudu, který je ukončen s značku EOF CTRL + Z.

Když "r+", "w+", nebo "a+" je určen typ přístupu, je povoleno čtení i zápis (soubor je označen jako otevřená "aktualizace").Avšak po přepnutí z čtení k psaní vstupní operace musí 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.Přepnete-li se v zápisu ke čtení, je nutné použít požadovanými volání buď fflush nebo do souboru, umístění funkce.

Kromě předchozí hodnoty následujících znaků lze připojit mode Chcete-li určit režim překladu pro znaky nového řádku.

  • t
    Otevřít jako text (překlad) režimu.V tomto režimu je interpretován CTRL + Z jako znak EOF na vstupu.V souborech, které jsou otevřeny pro čtení nebo zápis pomocí "a+", fopen kontroluje CTRL + Z na konci souboru a odstraní jej, pokud je to možné.To je provést, protože pomocí fseek a ftell k přesunům v souboru, který může způsobit končí CTRL + Z fseek k nesprávnému chování poblíž konce souboru.

V textovém režimu přepravu return–linefeed kombinace jsou přeloženy do jediného přečtené na vstupu a znaky konce řádku jsou převedeny na přepravu return–linefeed kombinace na výstupu.Po proudu I/O funkci Unicode pracuje v textovém režimu (výchozí), zdroj nebo cílový datový proud považován za posloupnost vícebajtových znaků.Proto funkce Unicode vstupní proud převést vícebajtových znaků na široké znaky (jako Pokud voláním mbtowc funkce).Ze stejného důvodu Unicode datový proud výstupu funkce převést široké znaky na vícebajtové znaky (jako Pokud voláním wctomb funkce).

  • b
    V binárním režimu (nepřeložený); překlady zahrnující znaky carriage return a linefeed potlačeny.

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

Další informace o použití textu a binární režim v Unicode a vícebajtové datový proud I/O, viz Text a binární režim souborového I/O a V textu a binárních režimy proudu Unicode I/O.

  • c
    Povolit potvrzení příznak přidružených filename tak, aby obsah vyrovnávací paměti souboru zapsány přímo na disk v případě obou fflush nebo _flushall je volána.

  • n
    Obnovit příznak potvrzení přidružených filename "potvrzení č." Toto nastavení je výchozí.Také přepisuje příznak globálního potvrzení, pokud propojíte váš program s COMMODE.OBJ.Výchozí příznak globálního potvrzení je "Ne potvrzení", není-li explicitně propojit váš program s COMMODE.OBJ (see Možnosti propojení).

  • N
    Určuje, že soubor není děděna podřízenými 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 random access z disku.

  • T
    Určuje jako dočasný soubor.Pokud je to možné, nejsou zapsány na disk.

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

  • ccs=ENCODING
    Určuje sada kódovaných znaků používat (UTF-8, UTF-16LE, nebo UNICODE) pro tento soubor.Pokud chcete kódování ANSI ponechejte nezadané.

Platné znaky pro mode řetězec, který se používá v fopen a _fdopen odpovídají oflag argumenty, které se používají v _Otevřít b a _sopen, takto.

Znaky v řetězci režimu

Rovnocenné 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

Používáte-li rb režimu, nemají k přenesení kódu a očekávají čtení většinu velkých souborů nebo nejsou obavy o výkonu sítě, můžete také zvážit, zda používat paměť mapována Win32 soubory volbu.

Požadavky

Function

Požadované záhlaví

fopen

<stdio.h>

_wfopen

<stdio.h> nebo <wchar.h>

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

c, n, t, S, R, T, A Dmode jsou možnosti rozšíření společnosti Microsoft pro fopen a _fdopen a neměl by sloužit, kde je žádoucí přenositelnost ANSI.

Příklad

Následující program otevře dva soubory.Používá fclose první soubor zavřete a _fcloseall Chcete-li zavřít 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 některou přepíše, pokud existuje), a to v textovém režimu, má kódování Unicode.Poté zapíše dva řetězce do souboru a soubor zavře.Výstupem je soubor s názvem _wfopen_test.xml, obsahující 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

Proud I/O

Výklad vícebajtové znakové sekvence

fclose _fcloseall

_fdopen _wfdopen

ferror

_fileno

freopen _wfreopen

_open, _wopen

_setmode

_sopen _wsopen