Sdílet prostřednictvím


CStdioFile Třída

Představuje soubor streamu runtime jazyka C, který je otevřen funkcí runtime fopen.

Syntaxe

class CStdioFile : public CFile

Členové

Veřejné konstruktory

Název Popis
CStdioFile::CStdioFile CStdioFile Vytvoří objekt z cesty nebo ukazatele souboru.

Veřejné metody

Název Popis
CStdioFile::Open Přetíženo. Open je určen pro použití s výchozím CStdioFile konstruktorem (Přepsání CFile::Open).
CStdioFile::ReadString Přečte jeden řádek textu.
CStdioFile::Seek Umístí aktuální ukazatel souboru.
CStdioFile::WriteString Zapíše jeden řádek textu.

Veřejné datové členy

Název Popis
CStdioFile::m_pStream Obsahuje ukazatel na otevřený soubor.

Poznámky

Streamové soubory jsou uloženy do vyrovnávací paměti a lze je otevřít v textovém režimu (výchozí) nebo v binárním režimu.

Textový režim poskytuje speciální zpracování pro páry návratového kanálu řádku na začátek řádku. Při psaní znaku odřádkování (nový řádek) (0x0A) do objektu v textovém režimu CStdioFile se do souboru odešle dvojice bajtů (0x0D, 0x0A). Při čtení se dvojice bajtů (0x0D, 0x0A) přeloží na jeden 0x0A bajt.

DuplicateFunkce CFile , LockRangea UnlockRange nejsou podporovány pro CStdioFile.

Pokud tyto funkce zavoláte na , CStdioFilezískáte .CNotSupportedException

Další informace o použití CStdioFilenaleznete v článcích Soubory v prostředí MFC a Zpracování souborů v referenční dokumentaci knihovny za běhu.

Hierarchie dědičnosti

CObject

CFile

CStdioFile

Požadavky

Záhlaví: afx.h

CStdioFile::CStdioFile

Vytvoří a inicializuje CStdioFile objekt.

CStdioFile();
CStdioFile(CAtlTransactionManager* pTM);
CStdioFile(FILE* pOpenStream);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags);

CStdioFile(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM);

Parametry

pOpenStream
Určuje ukazatel souboru vrácený voláním funkce fopenruntime jazyka C .

lpszFileName
Určuje řetězec, který je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní.

nOpenFlags
Určuje možnosti pro režimy vytváření, sdílení souborů a přístupu k souborům. Pomocí bitového operátoru OR ( | ) můžete zadat více možností.

Vyžaduje se jedna možnost režimu přístupu k souborům; jiné režimy jsou volitelné. Podívejte CFile::CFile se na seznam možností režimu a dalších příznaků. V prostředí MFC verze 3.0 a novější jsou povolené příznaky sdílení.

pTM
Ukazatel na CAtlTransactionManager objekt

Poznámky

Výchozí konstruktor nepřipošuje k objektu CStdioFile soubor. Při použití tohoto konstruktoru musíte použít metodu CStdioFile::Open k otevření souboru a jeho připojení k objektu CStdioFile .

Konstruktor s jedním parametrem připojí k objektu CStdioFile otevřený datový proud souboru. Povolené hodnoty ukazatele zahrnují předdefinované ukazatele stdinvstupního a výstupního souboru , stdoutnebo stderr.

Konstruktor se dvěma parametry vytvoří CStdioFile objekt a otevře odpovídající soubor s danou cestou.

Pokud projdete NULL buď nebo lpszFileNamepOpenStream , konstruktor vyvolá CInvalidArgException*.

Pokud soubor nelze otevřít nebo vytvořit, konstruktor vyvolá výjimku CFileException*.

Příklad

TCHAR* pFileName = _T("CStdio_File.dat");
CStdioFile f1;
if(!f1.Open(pFileName, CFile::modeCreate | CFile::modeWrite 
   | CFile::typeText)) 
{
   TRACE(_T("Unable to open file\n"));
}

CStdioFile f2(stdout);
try
{
   CStdioFile f3( pFileName,
      CFile::modeCreate | CFile::modeWrite | CFile::typeText );
}
catch(CFileException* pe)
{
   TRACE(_T("File could not be opened, cause = %d\n"),
      pe->m_cause);
   pe->Delete();
}

CStdioFile::m_pStream

Datový m_pStream člen je ukazatel na otevřený soubor vrácený funkcí fopenruntime jazyka C .

FILE* m_pStream;

Poznámky

Je NULL to v případě, že soubor nebyl nikdy otevřen nebo byl zavřený.

CStdioFile::Open

Přetíženo. Open je určen pro použití s výchozím CStdioFile konstruktorem.

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM,
    CFileException* pError = NULL);

Parametry

lpszFileName
Řetězec, který je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní.

nOpenFlags
Režim sdílení a přístupu Určuje akci, která se má provést při otevření souboru. Možnosti můžete kombinovat pomocí bitového operátoru OR (|). Vyžaduje se jedno oprávnění přístupu a jedna možnost sdílení; režimyCreate a modeNoInherit jsou volitelné.

pError
Ukazatel na existující objekt výjimky souboru, který obdrží stav neúspěšné operace.

pTM
Ukazatel na CAtlTransactionManager objekt.

Návratová hodnota

TRUE v případě úspěchu; jinak FALSE.

Poznámky

CStdioFile::ReadString

Čte textová data do vyrovnávací paměti až do limitu nMax-1 znaků ze souboru přidruženého k objektu CStdioFile .

virtual LPTSTR ReadString(
    LPTSTR lpsz,
    UINT nMax);

virtual BOOL ReadString(CString& rString);

Parametry

lpsz
Určuje ukazatel na uživatelsky zadanou vyrovnávací paměť, která obdrží textový řetězec s ukončenou hodnotou null.

nMax
Určuje maximální počet znaků, které se mají zapisovat do lpsz vyrovnávací paměti, včetně ukončující hodnoty null.

rString
Odkaz na CString objekt, který bude obsahovat řetězec při vrácení funkce.

Návratová hodnota

Ukazatel na vyrovnávací paměť obsahující textová data. NULL pokud bylo dosaženo konce souboru bez čtení jakýchkoli dat; nebo pokud byla dosažena logická hodnota, FALSE pokud byl dosažen konec souboru bez čtení dat.

Poznámky

Čtení je zastaveno prvním znakem nového řádku. Pokud se v takovém případě přečte méně než nMax-1 znaků, uloží se do vyrovnávací paměti znak nového řádku. Znak null ('\0') se připojí v obou případech.

CFile::Read je také k dispozici pro vstup v textovém režimu, ale neukončí se u dvojice návratového kanálu řádku řádku.

Poznámka:

Verze CString této funkce odebere '\n' verzi, pokud LPTSTR je k dispozici. Verze ne.

Příklad

CStdioFile f(stdin);
TCHAR buf[100];

f.ReadString(buf, 99);

CStdioFile::Seek

Přemísťuje ukazatel do dříve otevřeného souboru.

virtual ULONGLONG Seek(
    LONGLONG lOff,
    UINT nFrom);

Parametry

lOff
Počet bajtů pro přesunutí ukazatele

nFrom
Režim pohybu ukazatele Toto musí být jedna z následujících hodnot:

  • CFile::begin: Přesuňte bajty ukazatele lOff souboru vpřed od začátku souboru.

  • CFile::current: Přesuňte bajty ukazatele lOff souboru z aktuální pozice v souboru.

  • CFile::end: Přesuňte bajty ukazatele lOff souboru z konce souboru. Mějte na paměti, že lOff hledání do existujícího souboru musí být záporné. Kladné hodnoty budou hledat za koncem souboru.

Návratová hodnota

Pokud je požadovaná pozice legální, Seek vrátí nový posun bajtu od začátku souboru. V opačném případě je vrácená hodnota nedefinovaná a CFileException objekt je vyvolán.

Poznámky

Funkce Seek umožňuje náhodný přístup k obsahu souboru přesunutím ukazatele na zadanou částku, absolutně nebo relativně. Během hledání se ve skutečnosti nečtou žádná data. Pokud je požadovaná pozice větší než velikost souboru, délka souboru se na tuto pozici rozšíří a nevyvolá se žádná výjimka.

Při otevření souboru je ukazatel souboru umístěn na posunu 0, začátek souboru.

Tato implementace Seek je založena na funkci fseekRun-Time Library (CRT). Použití datových Seek proudů otevřených v textovém režimu má několik omezení. Další informace naleznete v tématu fseek, _fseeki64.

Příklad

Následující příklad ukazuje, jak přesunout Seek ukazatel 1000 bajtů od začátku cfile souboru. Všimněte si, že Seek nečte data, takže je nutné následně volat CStdioFile::ReadString ke čtení dat.

CStdioFile cfile(_T("Stdio_Seek_File.dat"), CFile::modeWrite |
   CFile::modeCreate);
LONGLONG lOff = 1000;
ULONGLONG lActual = cfile.Seek(lOff, CFile::begin);

CStdioFile::WriteString

Zapíše data z vyrovnávací paměti do souboru přidruženého k objektu CStdioFile .

virtual void WriteString(LPCTSTR lpsz);

Parametry

lpsz
Určuje ukazatel na vyrovnávací paměť, která obsahuje řetězec ukončený hodnotou null.

Poznámky

Ukončující znak null ( \0) není zapsán do souboru. Tato metoda zapíše do lpsz souboru znaky nového řádku jako dvojici návratového řádku řádku.

Chcete-li zapisovat data, která nejsou ukončena null do souboru, použijte CStdioFile::Write nebo CFile::Write.

Tato metoda vyvolá CInvalidArgException* výjimku, pokud zadáte NULL parametr lpsz .

Tato metoda vyvolá CFileException* odpověď na chyby systému souborů.

Příklad

CStdioFile f(stdout);
TCHAR buf[] = _T("test string");

f.WriteString(buf);

Viz také

CFile Třída
Graf hierarchie
CFile Třída
CFile::Duplicate
CFile::LockRange
CFile::UnlockRange
CNotSupportedException Třída