CFileException
Třída
Představuje podmínku výjimky související se souborem.
Syntaxe
class CFileException : public CException
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CFileException::CFileException |
CFileException Vytvoří objekt. |
Veřejné metody
Název | Popis |
---|---|
CFileException::ErrnoToException |
Vrátí kód příčiny odpovídající číslu chyby za běhu. |
CFileException::GetErrorMessage |
Načte zprávu popisující výjimku. |
CFileException::OsErrorToException |
Vrátí kód příčiny odpovídající kódu chyby operačního systému. |
CFileException::ThrowErrno |
Vyvolá výjimku souboru na základě čísla chyby modulu runtime. |
CFileException::ThrowOsError |
Vyvolá výjimku souboru na základě čísla chyby operačního systému. |
Veřejné datové členy
Název | Popis |
---|---|
CFileException::m_cause |
Obsahuje přenosný kód odpovídající příčině výjimky. |
CFileException::m_lOsError |
Obsahuje související číslo chyby operačního systému. |
CFileException::m_strFileName |
Obsahuje název souboru pro tuto výjimku. |
Poznámky
Třída CFileException
obsahuje veřejné datové členy, které obsahují kód přenosné příčiny a číslo chyby specifické pro operační systém. Třída také poskytuje statické členské funkce pro vyvolání výjimek souborů a pro vrácení kódů příčin pro chyby operačního systému i chyby za běhu jazyka C.
CFileException
objekty jsou sestaveny a vyvolány v CFile
členských funkcích a v členských funkcích odvozených tříd. K těmto objektům můžete přistupovat v rámci rozsahu výrazu CATCH
. Pro přenositelnost použijte pouze kód příčiny k získání důvodu výjimky. Další informace ových
Hierarchie dědičnosti
CFileException
Požadavky
Záhlaví: afx.h
CFileException::CFileException
CFileException
Vytvoří objekt, který uloží kód příčiny a kód operačního systému v objektu.
CFileException(
int cause = CFileException::none,
LONG lOsError = -1,
LPCTSTR lpszArchiveName = NULL);
Parametry
cause
Výčtová proměnná typu, která označuje důvod výjimky. Podívejte CFileException::m_cause
se na seznam možných hodnot.
lOsError
Důvod výjimky specifický pro operační systém, pokud je k dispozici. Parametr lOsError
poskytuje více informací, než cause
tomu bylo.
lpszArchiveName
Odkazuje na řetězec obsahující název objektu CFile
, který způsobuje výjimku.
Poznámky
Nepoužívejte tento konstruktor přímo, ale raději volejte globální funkci AfxThrowFileException
.
Poznámka:
Proměnná lOsError
se vztahuje pouze na CFile
objekty a CStdioFile
objekty. Třída CMemFile
nezpracuje tento kód chyby.
CFileException::ErrnoToException
Převede danou chybovou hodnotu knihovny za běhu na výčtovou chybovou CFileException
hodnotu.
static int PASCAL ErrnoToException(int nErrno);
Parametry
nErrno
Celočíselné kód chyby definovaný v souboru ERRNO.H
zahrnutí za běhu .
Návratová hodnota
Výčtová hodnota odpovídající dané chybové hodnotě knihovny za běhu
Poznámky
Podívejte CFileException::m_cause
se na seznam možných výčtových hodnot.
Příklad
ASSERT(CFileException::ErrnoToException(EACCES) ==
CFileException::accessDenied);
CFileException::GetErrorMessage
Načte text, který popisuje výjimku.
virtual BOOL GetErrorMessage(
LPTSTR lpszError,
UINT nMaxError,
PUINT pnHelpContext = NULL) const;
Parametry
lpszError
[in, out] Ukazatel na vyrovnávací paměť, která obdrží chybovou zprávu.
nMaxError
[v] Maximální počet znaků, které může zadaná vyrovnávací paměť obsahovat. To zahrnuje ukončovací NULL
znak.
pnHelpContext
[in, out] Ukazatel na celé číslo bez znaménka, které obdrží ID kontextu nápovědy. Pokud NULL
se nevrátí žádné ID.
Návratová hodnota
TRUE
pokud byla metoda úspěšná; jinak FALSE
.
Poznámky
Pokud je zadaná vyrovnávací paměť příliš malá, chybová zpráva se zkrátí.
Příklad
Následující příklad používá CFileException::GetErrorMessage
.
CFile fileInput;
CFileException ex;
// try to open a file for reading.
// The file will certainly not
// exist because there are too many explicit
// directories in the name.
// if the call to Open() fails, ex will be
// initialized with exception
// information. the call to ex.GetErrorMessage()
// will retrieve an appropriate message describing
// the error, and we'll add our own text
// to make sure the user is perfectly sure what
// went wrong.
if (!fileInput.Open(_T("\\Too\\Many\\Bad\\Dirs.DAT"), CFile::modeRead, &ex))
{
TCHAR szCause[255];
CString strFormatted;
ex.GetErrorMessage(szCause, 255);
// (in real life, it's probably more
// appropriate to read this from
// a string resource so it would be easy to
// localize)
strFormatted = _T("The data file could not be opened because of this error: ");
strFormatted += szCause;
AfxMessageBox(strFormatted);
}
else
{
// the file was opened, so do whatever work
// with fileInput
// we were planning...
fileInput.Close();
}
CFileException::m_cause
Obsahuje hodnoty definované výčtovým typem CFileException
.
int m_cause;
Poznámky
Tento datový člen je veřejná proměnná typu int
. Enumerátory a jejich významy jsou následující:
Chyba | Hodnota a význam |
---|---|
CFileException::none |
0: Nedošlo k žádné chybě. |
CFileException::genericException |
1: Došlo k nezadané chybě. |
CFileException::fileNotFound |
2: Soubor nelze najít. |
CFileException::badPath |
3: Všechna nebo část cesty jsou neplatné. |
CFileException::tooManyOpenFiles |
4: Byl překročen povolený počet otevřených souborů. |
CFileException::accessDenied |
5: Soubor nelze získat přístup. |
CFileException::invalidFile |
6: Došlo k pokusu o použití neplatného popisovače souboru. |
CFileException::removeCurrentDir |
7: Aktuální pracovní adresář nelze odebrat. |
CFileException::directoryFull |
8: Neexistují žádné další položky adresáře. |
CFileException::badSeek |
9: Při pokusu o nastavení ukazatele souboru došlo k chybě. |
CFileException::hardIO |
10: Došlo k chybě hardwaru. |
CFileException::sharingViolation |
11: SHARE.EXE nenačetla se nebo byla uzamčena sdílená oblast. |
CFileException::lockViolation |
12: Došlo k pokusu o uzamčení oblasti, která již byla uzamčena. |
CFileException::diskFull |
13: Disk je plný. |
CFileException::endOfFile |
14: Byl dosažen konec souboru. |
Poznámka:
Tyto CFileException
příčiny enumerátory se liší od CArchiveException
příčin výčtů.
Poznámka:
CArchiveException::generic
je zastaralý. Místo toho použijte genericException
. Pokud generic
se používá v aplikaci a je sestaven s /clr
, výsledné chyby syntaxe nejsou snadné dešifrovat.
Příklad
try
{
CFile f(_T("M_Cause_File.dat"), CFile::modeWrite);
}
catch(CFileException* e)
{
if( e->m_cause == CFileException::fileNotFound)
TRACE(_T("ERROR: File not found\n"));
e->Delete();
}
CFileException::m_lOsError
Obsahuje kód chyby operačního systému pro tuto výjimku.
LONG m_lOsError;
Poznámky
Seznam kódů chyb najdete v technické příručce k operačnímu systému. Tento datový člen je veřejná proměnná typu LONG
.
CFileException::m_strFileName
Obsahuje název souboru pro tuto podmínku výjimky.
CString m_strFileName;
CFileException::OsErrorToException
Vrátí enumerátor, který odpovídá dané lOsError
hodnotě. Pokud je kód chyby neznámý, funkce vrátí CFileException::generic
.
static int PASCAL OsErrorToException(LONG lOsError);
Parametry
lOsError
Kód chyby specifický pro operační systém.
Návratová hodnota
Výčtová hodnota odpovídající dané chybové hodnotě operačního systému.
Příklad
ASSERT(CFileException::OsErrorToException(ERROR_ACCESS_DENIED) ==
CFileException::accessDenied);
CFileException::ThrowErrno
CFileException
Vytvoří objekt odpovídající dané nErrno
hodnotě a vyvolá výjimku.
static void PASCAL ThrowErrno(int nErrno, LPCTSTR lpszFileName = NULL);
Parametry
nErrno
Celočíselné kód chyby definovaný v souboru ERRNO.H
zahrnutí za běhu .
lpszFileName
Ukazatel na řetězec obsahující název souboru, který způsobil výjimku, pokud je k dispozici.
Příklad
CFileException::ThrowErrno(EACCES); // "access denied"
CFileException::ThrowOsError
CFileException
Vyvolá odpovídající dané lOsError
hodnotě. Pokud je kód chyby neznámý, funkce vyvolá výjimku kódovanou jako CFileException::generic
.
static void PASCAL ThrowOsError(LONG lOsError, LPCTSTR lpszFileName = NULL);
Parametry
lOsError
Kód chyby specifický pro operační systém.
lpszFileName
Ukazatel na řetězec obsahující název souboru, který způsobil výjimku, pokud je k dispozici.
Příklad
CFileException::ThrowOsError(ERROR_ACCESS_DENIED); // "access denied"