CFile::Open
Přetíženo.Otevřít je navržena pro použití s výchozím CFile konstruktor.
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 cesta požadovaný soubor.Cesta může být relativní, absolutní nebo síťový název (UNC).nOpenFlags
A UINT definuje režim sdílení a přístup souboru.Určuje akci při otevření souboru.Možnosti můžete kombinovat pomocí (bitový operátor OR**|**) operátor.Jednoho přístupového oprávnění a možnost sdílení jednoho jsou požadovány; modeCreate a modeNoInherit režimy jsou volitelné.Najdete CFile seznam možností režimu konstruktor.pError
Ukazatel na existující objekt výjimky souborů, který se zobrazí stav selhání operace.pTM
Ukazatel na objekt CAtlTransactionManager
Vrácená hodnota
Nenulová hodnota, pokud otevřít byla úspěšná. jinak 0. pError Parametr má význam pouze v případě, je vrácena 0.
Poznámky
Dvě funkce formuláře "bezpečná" metodu pro otevírání souboru, kde je selhání normální, očekávaného stavu.
Zatímco CFile konstruktor vyvolají výjimku v chybovou podmínku, Otevřít vrátí FALSE pro chybové podmínky.Otevřít stále možné inicializovat CFileException k popisu chyby, ale objekt.Pokud nezadáte pError parametr, nebo pokud je NULL pro pError , Open vrátí FALSE a není vyvolána CFileException .Pokud předáte ukazatel existující CFileException , a otevřených dostal k chybě funkce bude jej vyplnit informace popisující tuto chybu.Ani jeden případ bude v otevřených vyvoláním výjimky.
Následující tabulka popisuje možné výsledky otevřených.
pError |
Došlo k chybě? |
Vrácená hodnota |
Obsah CFileException |
---|---|---|---|
NULL |
Ne |
TRUE |
není k dispozici |
PTR seCFileException |
Ne |
TRUE |
beze změny |
NULL |
Ano |
FALSE |
není k dispozici |
PTR seCFileException |
Ano |
FALSE |
inicializovat popisující 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;
}
Požadavky
Záhlaví: afx.h