CFile – třída
Základní třída pro třídy souborů třídy Microsoft Foundation Class.
Syntaxe
class CFile : public CObject
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CFile::CFile | CFile Vytvoří objekt z cesty nebo popisovače souboru. |
Veřejné metody
Název | Popis |
---|---|
CFile::Abort | Zavře soubor, který ignoruje všechna upozornění a chyby. |
CFile::Close | Zavře soubor a odstraní objekt. |
CFile::D uplicita | Vytvoří duplicitní objekt na základě tohoto souboru. |
CFile::Flush | Vyprázdní všechna data, která se ještě mají zapsat. |
CFile::GetFileName | Načte název souboru vybraného souboru. |
CFile::GetFilePath | Načte úplnou cestu k souboru vybraného souboru. |
CFile::GetFileTitle | Načte název vybraného souboru. |
CFile::GetLength | Načte délku souboru. |
CFile::GetPosition | Načte aktuální ukazatel souboru. |
CFile::GetStatus | Načte stav otevřeného souboru nebo ve statické verzi načte stav zadaného souboru (statické, virtuální funkce). |
CFile::LockRange | Uzamkne rozsah bajtů v souboru. |
CFile::Open | Bezpečně otevře soubor s možností testování chyb. |
CFile::Read | Čte (nepřipojená) data ze souboru na aktuální pozici souboru. |
CFile::Remove | Odstraní zadaný soubor (statickou funkci). |
CFile::Rename | Přejmenuje zadaný soubor (statickou funkci). |
CFile::Seek | Umístí aktuální ukazatel souboru. |
CFile::SeekToBegin | Umístí aktuální ukazatel souboru na začátek souboru. |
CFile::SeekToEnd | Umístí aktuální ukazatel souboru na konec souboru. |
CFile::SetFilePath | Nastaví úplnou cestu k souboru vybraného souboru. |
CFile::SetLength | Změní délku souboru. |
CFile::SetStatus | Nastaví stav zadaného souboru (statické, virtuální funkce). |
CFile::UnlockRange | Odemkne rozsah bajtů v souboru. |
CFile::Write | Zapisuje data (bez vyrovnávacího zápisu) do souboru do aktuální pozice souboru. |
Veřejné operátory
Název | Popis |
---|---|
CFile::operator HANDLE | Popisovač objektu CFile . |
Veřejné datové členy
Název | Popis |
---|---|
CFile::hFileNull | Určuje, zda má CFile objekt platný popisovač. |
CFile::m_hFile | Obvykle obsahuje popisovač souboru operačního systému. |
Chráněné datové členy
Název | Popis |
---|---|
CFile::m_pTM | Ukazatel na CAtlTransactionManager objekt |
Poznámky
Přímo poskytuje nepřečtené, binární disk vstupní/výstupní služby a nepřímo podporuje textové soubory a paměťové soubory prostřednictvím odvozených tříd. CFile
funguje ve spojení s CArchive
třídou pro podporu serializace objektů třídy Microsoft Foundation.
Hierarchický vztah mezi touto třídou a jeho odvozenými třídami umožňuje programu pracovat se všemi objekty souborů prostřednictvím polymorfického CFile
rozhraní. Například soubor paměti se chová jako soubor disku.
Používejte CFile
a jeho odvozené třídy pro vstupně-výstupní operace disku pro obecné účely. Použijte ofstream
nebo jiné třídy Společnosti Microsoft iostream
pro formátovaný text odeslaný do souboru disku.
Za normálních okolností je soubor disku otevřen automaticky při CFile
konstrukci a uzavřen při zničení. Statické členské funkce umožňují interrogovat stav souboru bez otevření souboru.
Další informace o použití CFile
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
CFile
Požadavky
Hlavička: afx.h
CFile::Abort
Zavře soubor přidružený k tomuto objektu a znepřístupní soubor pro čtení nebo zápis.
virtual void Abort();
Poznámky
Pokud jste soubor ještě před zničením objektu nezavřeli, destruktor ho za vás zavře.
Při zpracování výjimek se liší od CFile::Close
dvou důležitých CFile::Abort
způsobů. Za prvé, Abort
funkce nevyvolá výjimku při selhání, protože chyby jsou ignorovány Abort
. Za druhé, nebude ASSERT, Abort
pokud soubor nebyl otevřen nebo byl dříve zavřen.
Pokud jste objekt new
přidělil CFile
na haldě, musíte ho po zavření souboru odstranit. Abort
nastaví m_hFile
na CFile::hFileNull
.
Příklad
CStdioFile fileTest;
TCHAR* pszFileName = _T("Abort_File.dat");
// do stuff that may cause exceptions
CFileException ex;
if (!fileTest.Open(pszFileName, CFile::modeWrite, &ex))
{
ex.ReportError();
fileTest.Abort(); // close file safely and quietly
}
CFile::CFile
Vytvoří a inicializuje CFile
objekt.
CFile();
CFile(CAtlTransactionManager* pTM);
CFile(HANDLE hFile);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM);
Parametry
hFile
Popisovač souboru, který se má připojit k objektu CFile
lpszFileName
Relativní nebo úplná cesta k souboru pro připojení k objektu CFile
.
nOpenFlags
Bitová kombinace (OR) možností přístupu k souboru pro zadaný soubor. Možné možnosti najdete v části Poznámky.
pTM
Ukazatel na objekt CAtlTransactionManager
Poznámky
Následující pět tabulek uvádí možné možnosti pro parametr nOpenFlags .
Zvolte pouze jednu z následujících možností režimu přístupu k souborům. Výchozí režim přístupu k souborům je CFile::modeRead
, který je jen pro čtení.
Hodnota | Popis |
---|---|
CFile::modeRead |
Vyžaduje přístup jen pro čtení. |
CFile::modeWrite |
Vyžaduje pouze přístup k zápisu. |
CFile::modeReadWrite |
Požadavky na přístup ke čtení a zápisu. |
Zvolte jednu z následujících možností režimu znaků.
Hodnota | Popis |
---|---|
CFile::typeBinary |
Nastaví binární režim (používá se pouze v odvozených třídách). |
CFile::typeText |
Nastaví textový režim se speciálním zpracováním pro páry návratového řádku řádku na začátek řádku (používá se pouze v odvozených třídách). |
CFile::typeUnicode |
Nastaví režim Unicode (používá se pouze v odvozených třídách). Text se zapíše do souboru ve formátu Unicode, když je aplikace vytvořená v konfiguraci Unicode. Do souboru není zapsán žádný kusovník. |
Zvolte pouze jednu z následujících možností režimu sdílené složky. Výchozí režim sdílené složky je CFile::shareExclusive
, který je výhradní.
Hodnota | Popis |
---|---|
CFile::shareDenyNone |
Žádná omezení sdílení. |
CFile::shareDenyRead |
Odepře přístup ke čtení všem ostatním. |
CFile::shareDenyWrite |
Odepře přístup k zápisu všem ostatním. |
CFile::shareExclusive |
Odepře přístup ke čtení a zápisu všem ostatním. |
Zvolte první nebo obě z následujících možností režimu vytváření souborů. Výchozí režim vytváření je CFile::modeNoTruncate
, který je otevřen existující.
Hodnota | Popis |
---|---|
CFile::modeCreate |
Vytvoří nový soubor, pokud neexistuje žádný soubor. Pokud soubor již existuje, přepíše se a zpočátku nastaví na nulovou délku. |
CFile::modeNoTruncate |
Vytvoří nový soubor, pokud neexistuje žádný soubor; v opačném případě, pokud soubor již existuje, je připojen k objektu CFile . |
Zvolte následující možnosti ukládání souborů do mezipaměti, jak je popsáno. Ve výchozím nastavení systém používá schéma ukládání do mezipaměti pro obecné účely, které není k dispozici jako možnost.
Hodnota | Popis |
---|---|
CFile::osNoBuffer |
Systém pro soubor nepoužívá zprostředkující mezipaměť. Tato možnost zruší následující 2 možnosti. |
CFile::osRandomAccess |
Mezipaměť souborů je optimalizovaná pro náhodný přístup. Tuto možnost ani sekvenční kontrolu nepoužívejte. |
CFile::osSequentialScan |
Mezipaměť souborů je optimalizovaná pro sekvenční přístup. Nepoužívejte tuto možnost i možnost náhodného přístupu. |
CFile::osWriteThrough |
Operace zápisu se provádějí bez zpoždění. |
Pokud chcete zabránit zdědění popisovač souboru, zvolte následující možnost zabezpečení. Ve výchozím nastavení můžou všechny nové podřízené procesy používat popisovač souboru.
Hodnota | Popis |
---|---|
CFile::modeNoInherit |
Zabrání jakýmkoli podřízeným procesům v používání popisovače souboru. |
Výchozí konstruktor inicializuje členy, ale nepřipočítá k objektu CFile
soubor. Po použití tohoto konstruktoru pomocí CFile::Open metoda otevřete soubor a připojte ho k objektu CFile
.
Konstruktor s jedním parametrem inicializuje členy a připojí existující soubor k objektu CFile
.
Konstruktor se dvěma parametry inicializuje členy a pokusí se otevřít zadaný soubor. Pokud tento konstruktor úspěšně otevře zadaný soubor, soubor je připojen k objektu CFile
; jinak tento konstruktor vyvolá ukazatel na CInvalidArgException
objekt. Další informace o zpracování výjimek naleznete v tématu Výjimky.
CFile
Pokud objekt úspěšně otevře zadaný soubor, zavře tento soubor automaticky při CFile
zničení objektu. V opačném případě musíte soubor explicitně zavřít, jakmile se už k objektu CFile
nepřipojuje.
Příklad
Následující kód ukazuje, jak použít CFile
.
HANDLE hFile = CreateFile(_T("CFile_File.dat"),
GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
AfxMessageBox(_T("Couldn't create the file!"));
}
else
{
// Attach a CFile object to the handle we have.
CFile myFile(hFile);
static const TCHAR sz[] = _T("I love CFile!");
// write string
myFile.Write(sz, sizeof(sz));
// We need to call Close() explicitly. Note that there's no need to
// call CloseHandle() on the handle returned by the API because
// Close() automatically calls CloseHandle() for us.
myFile.Close();
CFile::Close
Zavře soubor přidružený k tomuto objektu a znepřístupní soubor pro čtení nebo zápis.
virtual void Close();
Poznámky
Pokud jste soubor ještě před zničením objektu nezavřeli, destruktor ho za vás zavře.
Pokud jste objekt new
přidělil CFile
na haldě, musíte ho po zavření souboru odstranit. Close
nastaví m_hFile
na CFile::hFileNull
.
Příklad
Podívejte se na příklad pro CFile::CFile.
CFile::D uplicita
Vytvoří duplicitní CFile
objekt pro daný soubor.
virtual CFile* Duplicate() const;
Návratová hodnota
Ukazatel na duplicitní CFile
objekt.
Poznámky
Tato funkce je ekvivalentní funkci runtime jazyka _dup
C .
CFile::Flush
Vynutí zápis všech dat zbývajících v vyrovnávací paměti souboru do souboru.
virtual void Flush();
Poznámky
Použití Flush
nezaručuje vyprázdnění vyrovnávacích CArchive
pamětí. Pokud používáte archiv, nejprve volejte CArchive::Flush .
Příklad
Podívejte se na příklad pro CFile::SetFilePath.
CFile::GetFileName
Voláním této členské funkce načtěte název zadaného souboru.
virtual CString GetFileName() const;
Návratová hodnota
Název souboru.
Poznámky
Když například zavoláte GetFileName
, aby se uživateli vygenerovala zpráva o souboru c:\windows\write\myfile.wri
, vrátí se název souboru myfile.wri
.
Chcete-li vrátit celou cestu k souboru, včetně názvu, zavolejte GetFilePath. Chcete-li vrátit název souboru ( myfile
), volání GetFileTitle.
Příklad
Tento fragment kódu otevře systém. SOUBOR INI ve vašem adresáři WINDOWS. Pokud se najde, v příkladu se vytiskne název a cesta a název, jak je znázorněno v části Výstup:
try
{
// try to open the file
CFile sysFile(_T("C:\\WINDOWS\\SYSTEM.INI"), CFile::modeRead);
// print out path name and title information
_tprintf_s(_T("Path is : \"%s\"\n"),
(LPCTSTR) sysFile.GetFilePath());
_tprintf_s(_T("Name is : \"%s\"\n"),
(LPCTSTR) sysFile.GetFileName());
_tprintf_s(_T("Title is: \"%s\"\n"),
(LPCTSTR) sysFile.GetFileTitle());
// close the file handle
sysFile.Close();
}
catch (CFileException* pEx)
{
// if an error occurs, just make a message box
pEx->ReportError();
pEx->Delete();
}
CFile::GetFilePath
Voláním této členské funkce načtěte úplnou cestu k zadanému souboru.
virtual CString GetFilePath() const;
Návratová hodnota
Úplná cesta zadaného souboru.
Poznámky
Když například zavoláteGetFilePath
, aby se uživateli vygenerovala zpráva o souboru, vrátí se cesta k c:\windows\write\myfile.wri
souboruc:\windows\write\myfile.wri
.
Chcete-li vrátit pouze název souboru (myfile.wri
), zavolejte GetFileName. Chcete-li vrátit název souboru (myfile
), zavolejte GetFileTitle.
Příklad
Podívejte se na příklad pro GetFileName.
CFile::GetFileTitle
Voláním této členské funkce načtěte název souboru (zobrazovaný název) souboru.
virtual CString GetFileTitle() const;
Návratová hodnota
Název podkladového souboru.
Poznámky
Tato metoda volá GetFileTitle k načtení názvu souboru. V případě úspěchu vrátí metoda řetězec, který by systém použil k zobrazení názvu souboru uživateli. Jinak metoda volá PathFindFileName k načtení názvu souboru (včetně přípony souboru) podkladového souboru. To znamená, že přípona souboru není vždy zahrnuta do vráceného řetězce názvu souboru. Další informace naleznete v tématu GetFileTitle a PathFindFileName v sadě Windows SDK.
Chcete-li vrátit celou cestu k souboru, včetně názvu, zavolejte GetFilePath. Chcete-li vrátit pouze název souboru, zavolejte GetFileName.
Příklad
Podívejte se na příklad pro GetFileName.
CFile::GetLength
Získá aktuální logickou délku souboru v bajtech.
virtual ULONGLONG GetLength() const;
Návratová hodnota
Délka souboru.
Příklad
CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception, and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
try
{
pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
CFile::modeRead | CFile::shareDenyNone);
ULONGLONG dwLength = pFile->GetLength();
CString str;
str.Format(_T("Your SYSTEM.INI file is %I64u bytes long."), dwLength);
AfxMessageBox(str);
}
catch (CFileException* pEx)
{
// Simply show an error message to the user.
pEx->ReportError();
pEx->Delete();
}
catch(CMemoryException* pEx)
{
pEx->ReportError();
pEx->Delete();
// We can't recover from this memory exception, so we'll
// just terminate the app without any cleanup. Normally,
// an application should do everything it possibly can to
// clean up properly and _not_ call AfxAbort().
AfxAbort();
}
// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
pFile->Close();
delete pFile;
}
CFile::GetPosition
Získá aktuální hodnotu ukazatele souboru, který lze použít v pozdějších voláních Seek
.
virtual ULONGLONG GetPosition() const;
Návratová hodnota
Ukazatel souboru.
Příklad
CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);
ASSERT(cfile.GetPosition() == lActual);
CFile::GetStatus
Tato metoda načte informace o stavu související s danou CFile
instancí objektu nebo danou cestou k souboru.
BOOL GetStatus(CFileStatus& rStatus) const;
static BOOL PASCAL GetStatus(
LPCTSTR lpszFileName,
CFileStatus& rStatus,
CAtlTransactionManager* pTM = NULL);
Parametry
rStatus
Odkaz na uživatelem zadanou CFileStatus
strukturu, která obdrží informace o stavu. Struktura CFileStatus
má následující pole:
CTime m_ctime
Datum a čas vytvoření souboru.CTime m_mtime
Datum a čas poslední změny souboru.CTime m_atime
Datum a čas posledního přístupu k souboru pro čtení.ULONGLONG m_size
Logická velikost souboru v bajtech, jak je hlášeno příkazem DIR.BYTE m_attribute
Bajt atributu souboru.char m_szFullName[_MAX_PATH]
Absolutní název souboru v znakové sadě Windows.
lpszFileName
Řetězec ve znakové sadě Windows, která je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní nebo může obsahovat název síťové cesty.
pTM
Ukazatel na objekt CAtlTransactionManager
Návratová hodnota
TRUE, pokud jsou informace o stavu pro zadaný soubor úspěšně získány; jinak NEPRAVDA.
Poznámky
Nestatická verze načte informace o stavu otevřeného GetStatus
souboru přidruženého k danému CFile
objektu. Statická verze GetStatus
získá stav souboru z dané cesty k souboru bez skutečného otevření souboru. Tato verze je užitečná pro testování existence a přístupových práv k souboru.
Člen m_attribute
CFileStatus
struktury odkazuje na sadu atributů souboru. Třída CFile
poskytuje typ výčtu atributu, takže atributy souboru lze specifikovat symbolicky:
enum Attribute {
normal = 0x00,
readOnly = 0x01,
hidden = 0x02,
system = 0x04,
volume = 0x08,
directory = 0x10,
archive = 0x20
};
Příklad
CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);
CFileStatus status;
if(cfile.GetStatus(status)) // virtual member function
{
TRACE(_T("File size = %u\n"), status.m_size);
}
TCHAR* pszFileName = _T("SetLength_File.dat");
if(CFile::GetStatus(pszFileName, status)) // static function
{
TRACE(_T("Full file name = %s\n"), status.m_szFullName);
}
CFile::hFileNull
Určuje přítomnost platného popisovače souboru pro CFile
objekt.
static AFX_DATA const HANDLE hFileNull;
Poznámky
Tato konstanta slouží k určení, zda CFile
má objekt platný popisovač souboru.
Následující příklad ukazuje tuto operaci:
if (myFile.m_hFile != CFile::hFileNull)
;//perform operations on the file
else
;//indicate the presence of an invalid handle
CFile::LockRange
Uzamkne rozsah bajtů v otevřeném souboru a vyvolá výjimku, pokud je soubor již uzamčený.
virtual void LockRange(
ULONGLONG dwPos,
ULONGLONG dwCount);
Parametry
DwPos
Posun bajtu začátku rozsahu bajtů, který se má uzamknout.
dwCount
Počet bajtů v rozsahu, který chcete uzamknout.
Poznámky
Uzamčení bajtů v souboru brání přístupu k těmto bajtům jinými procesy. Můžete uzamknout více než jednu oblast souboru, ale nejsou povoleny žádné překrývající se oblasti.
Když oblast odemknete pomocí UnlockRange
členské funkce, rozsah bajtů musí přesně odpovídat oblasti, která byla dříve uzamčena. Funkce LockRange
nesloučí sousední oblasti. Pokud sousedí dvě uzamčené oblasti, musíte každou oblast odemknout zvlášť.
Poznámka:
Tato funkce není k dispozici pro -odvozenou CMemFile
třídu.
Příklad
CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);
// do something with the file
cfile.UnlockRange(dwPos, dwCount);
CFile::m_hFile
Obsahuje popisovač souboru operačního systému pro otevřený soubor.
HANDLE m_hFile;
Poznámky
m_hFile
je veřejná proměnná typu UINT. Obsahuje CFile::hFileNull
indikátor prázdného souboru nezávislý na operačním systému, pokud nebyl přiřazen popisovač.
m_hFile
Použití se nedoporučuje, protože význam člena závisí na odvozené třídě. m_hFile
je určena jako veřejný člen pro usnadnění podpory nepolymorfního použití třídy.
CFile::m_pTM
Ukazatel na CAtlTransactionManager
objekt.
CAtlTransactionManager* m_pTM;
Poznámky
CFile::Open
Přetíženo. Open
je určen pro použití s výchozím CFile
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ý obsahuje cestu k požadovanému souboru. Cesta může být relativní, absolutní nebo název sítě (UNC).
nOpenFlags
UINT, který definuje režim sdílení a přístupu souboru. Určuje akci, která se má provést při otevření souboru. Možnosti můžete kombinovat pomocí operátoru bitwise-OR ( |
). Vyžaduje se jedno oprávnění přístupu a jedna možnost sdílení; a modeCreate
modeNoInherit
režimy jsou volitelné. Seznam možností režimu najdete v konstruktoru CFile .
Chyba pError
Ukazatel na existující objekt výjimky souboru, který obdrží stav neúspěšné operace.
pTM
Ukazatel na objekt CAtlTransactionManager
Návratová hodnota
Nenulové, pokud bylo otevření úspěšné; jinak 0. Parametr pError je smysluplný pouze v případě, že se vrátí hodnota 0.
Poznámky
Open
Dvě funkce jsou "bezpečné" metody pro otevření souboru, kde selhání je normální očekávaná podmínka.
CFile
Zatímco konstruktor vyvolá výjimku v chybovém stavu, Open
vrátí hodnotu FALSE pro chybové podmínky. Open
může stále inicializovat CFileException objekt popis chyby, ale. Pokud nezadáte parametr pError nebo pokud předáte hodnotu NULL pro chybu pError, Open
vrátí hodnotu FALSE a nevyvolá CFileException
chybu . Pokud předáte ukazatel existujícímu objektu CFileException
a Open
dojde k chybě, funkce ji vyplní informacemi popisujícími tuto chybu. Open
v obou případech nevyvolá výjimku.
Následující tabulka popisuje možné výsledky .Open
pError |
Došlo k chybě | Vrácená hodnota | Obsah CFileException |
---|---|---|---|
NULL | No | TRUE | Není k dispozici |
ptr to CFileException |
No | TRUE | nezměněný |
NULL | Ano | FALSE | Není k dispozici |
ptr to CFileException |
Ano | FALSE | inicializováno k popisu chyby |
Příklad
CFile f;
CFileException e;
TCHAR* pszFileName = _T("Open_File.dat");
if(!f.Open(pszFileName, CFile::modeCreate | CFile::modeWrite, &e))
{
TRACE(_T("File could not be opened %d\n"), e.m_cause);
}
//A second example for CFile::Open.
//This function uses CFile to copy binary files.
bool BinaryFileCopy(LPCTSTR pszSource, LPCTSTR pszDest)
{
// constructing these file objects doesn't open them
CFile sourceFile;
CFile destFile;
// we'll use a CFileException object to get error information
CFileException ex;
// open the source file for reading
if (!sourceFile.Open(pszSource,
CFile::modeRead | CFile::shareDenyWrite, &ex))
{
// complain if an error happened
// no need to delete the ex object
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
_tprintf_s(_T("Couldn't open source file: %1024s"), szError);
return false;
}
else
{
if (!destFile.Open(pszDest, CFile::modeWrite |
CFile::shareExclusive | CFile::modeCreate, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
_tprintf_s(_T("Couldn't open source file: %1024s"), szError);
sourceFile.Close();
return false;
}
BYTE buffer[4096];
DWORD dwRead;
// Read in 4096-byte blocks,
// remember how many bytes were actually read,
// and try to write that many out. This loop ends
// when there are no more bytes to read.
do
{
dwRead = sourceFile.Read(buffer, 4096);
destFile.Write(buffer, dwRead);
}
while (dwRead > 0);
// Close both files
destFile.Close();
sourceFile.Close();
}
return true;
}
CFile::operator HANDLE
Pomocí tohoto operátoru předejte popisovač objektu CFile
funkcím, jako je ReadFileEx a GetFileTime, které očekávají .HANDLE
operator HANDLE() const;
CFile::Read
Načte data do vyrovnávací paměti ze souboru přidruženého k objektu CFile
.
virtual UINT Read(
void* lpBuf,
UINT nCount);
Parametry
lpBuf
Ukazatel na uživatelsky zadanou vyrovnávací paměť, která přijímá data načtená ze souboru.
nCount
Maximální počet bajtů,kteréch U souborů v textovém režimu se páry návratového řádku řádku počítají jako jednotlivé znaky.
Návratová hodnota
Počet bajtů přenesených do vyrovnávací paměti. U všech CFile
tříd může být návratová hodnota menší než nCount , pokud byl dosažen konec souboru.
Příklad
CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);
cfile.Flush();
cfile.SeekToBegin();
char pbufRead[100];
cfile.Read(pbufRead, sizeof(pbufRead));
ASSERT(0 == memcmp(pbufWrite, pbufRead, sizeof(pbufWrite)));
Další příklad najdete v tématu CFile::Open.
CFile::Remove
Tato statická funkce odstraní soubor určený cestou.
static void PASCAL Remove(
LPCTSTR lpszFileName,
CAtlTransactionManager* pTM = NULL);
Parametry
lpszFileName
Řetězec, který je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní a může obsahovat název sítě.
pTM
Ukazatel na objekt CAtlTransactionManager
Poznámky
Remove
neodebere adresář.
Členová Remove
funkce vyvolá výjimku, pokud je připojený soubor otevřený nebo pokud soubor nelze odebrat. Tato funkce je ekvivalentní příkazu DEL.
Příklad
//example for CFile::Remove
TCHAR* pFileName = _T("Remove_File.dat");
try
{
CFile::Remove(pFileName);
}
catch (CFileException* pEx)
{
TRACE(_T("File %20s cannot be removed\n"), pFileName);
pEx->Delete();
}
CFile::Rename
Tato statická funkce přejmenuje zadaný soubor.
static void PASCAL Rename(
LPCTSTR lpszOldName,
LPCTSTR lpszNewName,
CAtlTransactionManager* pTM = NULL);
Parametry
lpszOldName
Stará cesta.
lpszNewName
Nová cesta.
pTM
Ukazatel na objekt CAtlTransactionManager
Poznámky
Adresáře nelze přejmenovat. Tato funkce je ekvivalentní příkazu REN.
Příklad
TCHAR* pOldName = _T("Oldname_File.dat");
TCHAR* pNewName = _T("Renamed_File.dat");
try
{
CFile::Rename(pOldName, pNewName);
}
catch(CFileException* pEx )
{
TRACE(_T("File %20s not found, cause = %d\n"), pOldName,
pEx->m_cause);
pEx->Delete();
}
CFile::Seek
Přemísťuje ukazatel souboru do otevřeného souboru.
virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);
Parametry
LOff
Počet bajtů pro přesunutí ukazatele souboru Kladné hodnoty přesunou ukazatel souboru na konec souboru; záporné hodnoty přesunou ukazatel souboru na začátek souboru.
nFrom
Pozice, ze které se má hledat. Možné hodnoty najdete v části Poznámky.
Návratová hodnota
Pozice ukazatele souboru, pokud byla metoda úspěšná; v opačném případě je vrácená hodnota nedefinovaná a vyvolá se ukazatel na CFileException
výjimku.
Poznámky
Následující tabulka uvádí možné hodnoty pro parametr nFrom .
Hodnota | Popis |
---|---|
CFile::begin |
Vyhledejte ho od začátku souboru. |
CFile::current |
Vyhledejte z aktuálního umístění ukazatele souboru. |
CFile::end |
Vyhledejte ho od konce souboru. |
Při otevření souboru je ukazatel souboru umístěn na 0, začátek souboru.
Ukazatel souboru můžete nastavit na pozici nad koncem souboru. Pokud to uděláte, velikost souboru se nezvětší, dokud do souboru nezapíšete.
Obslužná rutina výjimky pro tuto metodu musí odstranit objekt výjimky po zpracování výjimky.
Příklad
CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);
CFile::SeekToBegin
Nastaví hodnotu ukazatele souboru na začátek souboru.
void SeekToBegin();
Poznámky
SeekToBegin()
je ekvivalent Seek( 0L, CFile::begin )
.
Příklad
CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();
CFile::SeekToEnd
Nastaví hodnotu ukazatele souboru na logický konec souboru.
ULONGLONG SeekToEnd();
Návratová hodnota
Délka souboru vbajchch
Poznámky
SeekToEnd()
je ekvivalent CFile::Seek( 0L, CFile::end )
.
Příklad
CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();
CFile::SetFilePath
Voláním této funkce určíte cestu k souboru. Pokud například cesta k souboru není k dispozici při vytváření objektu CFile , volání SetFilePath
, které ho poskytne.
virtual void SetFilePath(LPCTSTR lpszNewName);
Parametry
lpszNewName
Ukazatel na řetězec určující novou cestu.
Poznámky
Poznámka:
SetFilePath
neotevře soubor ani nevytvoří soubor; jednoduše přidruží CFile
objekt k názvu cesty, který se pak dá použít.
Příklad
TCHAR* pstrName = _T("C:\\test\\SetPath_File.dat");
// open a file
HANDLE hFile = ::CreateFile(pstrName, GENERIC_WRITE, FILE_SHARE_READ,
NULL, CREATE_ALWAYS, 0, NULL);
if (hFile != INVALID_HANDLE_VALUE)
{
// attach a CFile object to it
CFile myFile(hFile);
// At this point, myFile doesn't know the path name for the file
// it owns because Windows doesn't associate that information
// with the handle. Any CFileExceptions thrown by this object
// won't have complete information.
// Calling SetFilePath() remedies that problem by letting CFile
// know the name of the file that's associated with the object.
myFile.SetFilePath(pstrName);
// write something to the file and flush it immediately
DWORD dwValue = 1234;
myFile.Write(&dwValue, sizeof(dwValue));
myFile.Flush();
// destroying the CObject here will call ::CloseHandle() on the file
}
CFile::SetLength
Voláním této funkce můžete změnit délku souboru.
virtual void SetLength(ULONGLONG dwNewLen);
Parametry
dwNewLen
Požadovaná délka souboru v bajtech Tato hodnota může být větší nebo menší než aktuální délka souboru. Soubor se podle potřeby rozšíří nebo zkrátí.
Poznámky
Poznámka:
V případě CMemFile
, že by tato funkce mohla vyvolat CMemoryException
objekt.
Příklad
CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);
CFile::SetStatus
Nastaví stav souboru přidruženého k tomuto umístění souboru.
static void PASCAL SetStatus(
LPCTSTR lpszFileName,
const CFileStatus& status,
CAtlTransactionManager* pTM = NULL);
Parametry
lpszFileName
Řetězec, který je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní a může obsahovat název sítě.
status
Vyrovnávací paměť obsahující nové informace o stavu. Voláním GetStatus
členské funkce předvyplníte CFileStatus
strukturu aktuálními hodnotami a podle potřeby proveďte změny. Pokud je hodnota 0, odpovídající položka stavu se neaktualizuje. Popis CFileStatus
struktury najdete v členské funkci GetStatus.
pTM
Ukazatel na objekt CAtlTransactionManager
Poznámky
Pokud chcete nastavit čas, upravte m_mtime
pole stavu.
Při volání SetStatus
při pokusu o změnu pouze atributů souboru a m_mtime
člen stavové struktury souboru je nenulový, mohou být ovlivněny i atributy (změna časového razítka může mít vedlejší účinky na atributy). Pokud chcete změnit pouze atributy souboru, nejprve nastavte m_mtime
člen struktury stavu souboru na nulu a pak proveďte volání SetStatus
.
Příklad
TCHAR* pFileName = _T("ReadOnly_File.dat");
CFileStatus status;
CFile::GetStatus(pFileName, status);
status.m_attribute |= CFile::readOnly;
CFile::SetStatus(pFileName, status);
CFile::UnlockRange
Odemkne rozsah bajtů v otevřeném souboru.
virtual void UnlockRange(
ULONGLONG dwPos,
ULONGLONG dwCount);
Parametry
DwPos
Posun bajtu od začátku rozsahu bajtů, který se má odemknout.
dwCount
Počet bajtů v rozsahu, který se má odemknout.
Poznámky
Podrobnosti najdete v popisu členské funkce LockRange .
Poznámka:
Tato funkce není k dispozici pro -odvozenou CMemFile
třídu.
Příklad
CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);
// do something with the file
cfile.UnlockRange(dwPos, dwCount);
CFile::Write
Zapíše data z vyrovnávací paměti do souboru přidruženého k objektu CFile
.
virtual void Write(
const void* lpBuf,
UINT nCount);
Parametry
lpBuf
Ukazatel na vyrovnávací paměť zadanou uživatelem, která obsahuje data, která se mají zapisovat do souboru.
nCount
Početch U souborů v textovém režimu se páry návratového řádku řádku počítají jako jednotlivé znaky.
Poznámky
Write
vyvolá výjimku v reakci na několik podmínek, včetně podmínky plného disku.
Příklad
CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);
cfile.Flush();
Podívejte se také na příklady pro CFile::CFile a CFile::Open.
Viz také
MFC – ukázka DRAWCLI
CObject – třída
Graf hierarchie
CStdioFile – třída
CMemFile – třída