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.
Duplicate
Funkce CFile
, LockRange
a UnlockRange
nejsou podporovány pro CStdioFile
.
Pokud tyto funkce zavoláte na , CStdioFile
získáte .CNotSupportedException
Další informace o použití CStdioFile
naleznete 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
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 fopen
runtime 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 stdin
vstupního a výstupního souboru , stdout
nebo stderr
.
Konstruktor se dvěma parametry vytvoří CStdioFile
objekt a otevře odpovídající soubor s danou cestou.
Pokud projdete NULL
buď nebo lpszFileName
pOpenStream
, 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í fopen
runtime 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 ukazatelelOff
souboru vpřed od začátku souboru.CFile::current
: Přesuňte bajty ukazatelelOff
souboru z aktuální pozice v souboru.CFile::end
: Přesuňte bajty ukazatelelOff
souboru z konce souboru. Mějte na paměti, želOff
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 fseek
Run-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