Sdílet prostřednictvím


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

CObject

CException

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.Hzahrnutí 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 NULLse 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.Hzahrnutí 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"         

Viz také

CException Třída
Graf hierarchie
Zpracování výjimek