Megosztás a következőn keresztül:


CFileException osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Fájlhoz kapcsolódó kivételfeltételt jelöl.

Szemantika

class CFileException : public CException

Tagok

Nyilvános konstruktorok

Név Description
CFileException::CFileException Egy CFileException objektumot hoz létre.

Nyilvános metódusok

Név Description
CFileException::ErrnoToException Futásidejű hibaszámnak megfelelő okkódot ad vissza.
CFileException::GetErrorMessage Lekéri a kivételt leíró üzenetet.
CFileException::OsErrorToException Egy operációsrendszer-hibakódnak megfelelő okkódot ad vissza.
CFileException::ThrowErrno Futásidejű hibaszám alapján fájlkivételt eredményez.
CFileException::ThrowOsError Fájlkivételt eredményez az operációs rendszer hibaszáma alapján.

Nyilvános adatok tagjai

Név Description
CFileException::m_cause A kivétel okának megfelelő hordozható kódot tartalmaz.
CFileException::m_lOsError A kapcsolódó operációsrendszer-hibaszámot tartalmazza.
CFileException::m_strFileName A kivételhez tartozó fájl nevét tartalmazza.

Megjegyzések

Az CFileException osztály olyan nyilvános adattagokat tartalmaz, amelyek a hordozható okkódot és az operációs rendszerspecifikus hibaszámot tartalmazzák. Az osztály statikus tagfüggvényeket is biztosít a fájlkivüldések eldobására, valamint az operációs rendszer hibáinak és a C futásidejű hibák okkódjainak visszaadására.

CFileException az objektumok tagfüggvényekben CFile és származtatott osztályok tagfüggvényeiben jönnek létre és jelennek meg. Ezeket az objektumokat egy CATCH kifejezés hatókörén belül érheti el. A hordozhatóság érdekében csak az okkódot használja a kivétel okának lekéréséhez. A kivételekről további információt a Kivételkezelés (MFC) című cikkben talál.

Öröklési hierarchia

CObject

CException

CFileException

Requirements

Fejléc:afx.h

CFileException::CFileException

Létrehoz egy CFileException objektumot, amely az okkódot és az operációs rendszer kódját tárolja az objektumban.

CFileException(
    int cause = CFileException::none,
    LONG lOsError = -1,
    LPCTSTR lpszArchiveName = NULL);

Paraméterek

cause
Enumerált típusváltozó, amely a kivétel okát jelzi. Tekintse meg CFileException::m_cause a lehetséges értékek listáját.

lOsError
A kivétel operációsrendszer-specifikus oka, ha elérhető. A lOsError paraméter több információt biztosít, mint cause amennyi.

lpszArchiveName
A kivételt okozó objektum nevét CFile tartalmazó sztringre mutat.

Megjegyzések

Ne használja közvetlenül ezt a konstruktort, hanem hívja meg a globális függvényt AfxThrowFileException.

Megjegyzés:

A változó lOsError csak az objektumokra CFile vonatkozik CStdioFile . Az CMemFile osztály nem kezeli ezt a hibakódot.

CFileException::ErrnoToException

Egy adott futásidejű kódtár hibaértékét enumerált hibaértékké CFileException alakítja.

static int PASCAL ErrnoToException(int nErrno);

Paraméterek

nErrno
A futásidejű include fájlban ERRNO.Hdefiniált egész szám hibakódja.

Visszaadott érték

Egy adott futásidejű kódtár hibaértékének megfelelő számbavételi érték.

Megjegyzések

Tekintse meg CFileException::m_cause a lehetséges számbavételi értékek listáját.

Example

ASSERT(CFileException::ErrnoToException(EACCES) == 
   CFileException::accessDenied);

CFileException::GetErrorMessage

Lekéri a kivételt leíró szöveget.

virtual BOOL GetErrorMessage(
    LPTSTR lpszError,
    UINT nMaxError,
    PUINT pnHelpContext = NULL) const;

Paraméterek

lpszError
[be, ki] Mutató egy hibaüzenetet kapó pufferre.

nMaxError
[in] A megadott puffer legfeljebb ennyi karaktert tartalmazhat. Ez magában foglalja a megszüntető NULL karaktert is.

pnHelpContext
[be, ki] Mutasson egy aláíratlan egész számra, amely megkapja a súgókörnyezet azonosítóját. Ha NULLa függvény nem ad vissza azonosítót.

Visszaadott érték

TRUE ha a módszer sikeres volt; egyéb esetben FALSE.

Megjegyzések

Ha a megadott puffer túl kicsi, a hibaüzenet csonkolt.

Example

Az alábbi példa CFileException::GetErrorMessagehasznál.

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

Számbavételi típus által definiált CFileException értékeket tartalmaz.

int m_cause;

Megjegyzések

Ez az adattag egy nyilvános változótípus int. Az enumerátorok és jelentésük a következő:

Error Érték és jelentés
CFileException::none 0: Nem történt hiba.
CFileException::genericException 1: Meghatározatlan hiba történt.
CFileException::fileNotFound 2: A fájl nem található.
CFileException::badPath 3: Az elérési út egésze vagy egy része érvénytelen.
CFileException::tooManyOpenFiles 4: A megnyitott fájlok engedélyezett száma túllépte a megengedett értéket.
CFileException::accessDenied 5: A fájl nem érhető el.
CFileException::invalidFile 6: Érvénytelen fájlleírót kíséreltek meg használni.
CFileException::removeCurrentDir 7: Az aktuális munkakönyvtár nem távolítható el.
CFileException::directoryFull 8: Nincs több könyvtárbejegyzés.
CFileException::badSeek 9: Hiba történt a fájlmutató beállításával.
CFileException::hardIO 10: Hardverhiba történt.
CFileException::sharingViolation 11: SHARE.EXE nincs betöltve, vagy egy megosztott régió zárolva lett.
CFileException::lockViolation 12: Kísérlet történt egy már zárolt régió zárolására.
CFileException::diskFull 13: A lemez megtelt.
CFileException::endOfFile 14: A fájl vége el lett érve.

Megjegyzés:

Ezek az CFileException ok-enumerátorok különböznek az CArchiveException ok-enumerátoroktól.

Megjegyzés:

CArchiveException::generic már nem ajánlott. A genericException használható helyette. Ha generic egy alkalmazásban használják, és azzal /clrvannak felépítve, az ebből eredő szintaxishibákat nem könnyű megfejteni.

Example

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

A kivétel operációsrendszer-hibakódját tartalmazza.

LONG m_lOsError;

Megjegyzések

A hibakódok listáját az operációs rendszer műszaki kézikönyvében találhatja meg. Ez az adattag egy nyilvános változótípus LONG.

CFileException::m_strFileName

A kivételfeltétel fájlnevét tartalmazza.

CString m_strFileName;

CFileException::OsErrorToException

Egy adott értéknek megfelelő enumerátort ad lOsError vissza. Ha a hibakód ismeretlen, akkor a függvény ad vissza CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

Paraméterek

lOsError
Operációs rendszerspecifikus hibakód.

Visszaadott érték

Egy adott operációsrendszer-hibaértéknek megfelelő számbavételi érték.

Example

ASSERT(CFileException::OsErrorToException(ERROR_ACCESS_DENIED) == 
   CFileException::accessDenied);

CFileException::ThrowErrno

CFileException Egy adott nErrno értéknek megfelelő objektumot hoz létre, majd a kivételt veti ki.

static void PASCAL ThrowErrno(int nErrno, LPCTSTR lpszFileName = NULL);

Paraméterek

nErrno
A futásidejű include fájlban ERRNO.Hdefiniált egész szám hibakódja.

lpszFileName
A kivételt okozó fájl nevét tartalmazó sztringre mutató mutató, ha elérhető.

Example

CFileException::ThrowErrno(EACCES);  // "access denied"

CFileException::ThrowOsError

CFileException Egy adott értéknek megfelelő értéket ad lOsError vissza. Ha a hibakód ismeretlen, akkor a függvény kivételkóddal kódot ad CFileException::generic.

static void PASCAL ThrowOsError(LONG lOsError, LPCTSTR lpszFileName = NULL);

Paraméterek

lOsError
Operációs rendszerspecifikus hibakód.

lpszFileName
A kivételt okozó fájl nevét tartalmazó sztringre mutató mutató, ha elérhető.

Example

CFileException::ThrowOsError(ERROR_ACCESS_DENIED);  // "access denied"         

Lásd még

CException osztály
hierarchiadiagram
Kivételfeldolgozás