Freigeben über


CFileException-Klasse

Stellt eine dateibezogene Ausnahmebedingung dar.

Syntax

class CFileException : public CException

Member

Öffentliche Konstruktoren

Name Beschreibung
CFileException::CFileException Erstellt ein CFileException-Objekt.

Öffentliche Methoden

Name Beschreibung
CFileException::ErrnoToException Gibt den Code zurück, der einer Laufzeitfehlernummer entspricht.
CFileException::GetErrorMessage Ruft die Nachricht ab, die eine Ausnahme beschreibt.
CFileException::OsErrorToException Gibt einen Ursachecode zurück, der einem Fehlercode des Betriebssystems entspricht.
CFileException::ThrowErrno Löst eine Datei exception basierend auf einer Laufzeitfehlernummer aus.
CFileException::ThrowOsError Löst eine Datei exception basierend auf einer Fehlernummer des Betriebssystems aus.

Öffentliche Datenmember

Name Beschreibung
CFileException::m_cause Enthält portablen Code, der der Ausnahmeursache entspricht.
CFileException::m_lOsError Enthält die zugehörige Fehlernummer des Betriebssystems.
CFileException::m_strFileName Enthält den Namen der Datei für diese Ausnahme.

Hinweise

Die CFileException Klasse enthält öffentliche Datenmmber, die den portierbaren Ursachencode und die betriebssystemspezifische Fehlernummer enthalten. Die Klasse bietet außerdem statische Memberfunktionen zum Auslösen von Datei exceptions und zum Zurückgeben von Ursachencodes für Betriebssystemfehler und C-Laufzeitfehler.

CFileException Objekte werden in CFile Memberfunktionen und in Memberfunktionen abgeleiteter Klassen erstellt und ausgelöst. Sie können auf diese Objekte innerhalb des Bereichs eines CATCH Ausdrucks zugreifen. Verwenden Sie für die Portabilität nur den Ursachencode, um den Grund für eine Ausnahme abzurufen. Weitere Informationen zu Ausnahmen finden Sie im Artikel "Exception Handling (MFC)".

Vererbungshierarchie

CObject

CException

CFileException

Anforderungen

Header: afx.h

CFileException::CFileException

Erstellt ein CFileException Objekt, das den Ursachecode und den Betriebssystemcode im Objekt speichert.

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

Parameter

cause
Eine Aufzählungstypvariable, die den Grund für die Ausnahme angibt. Eine Liste der möglichen Werte finden Sie unter.See CFileException::m_cause for a list of the possible values.

lOsError
Ein betriebssystemspezifischer Grund für die Ausnahme, falls verfügbar. Der lOsError Parameter stellt mehr Informationen bereit, als cause dies der Fall ist.

lpszArchiveName
Verweist auf eine Zeichenfolge, die den Namen des CFile Objekts enthält, das die Ausnahme verursacht.

Hinweise

Verwenden Sie diesen Konstruktor nicht direkt, sondern rufen Sie stattdessen die globale Funktion AfxThrowFileExceptionauf.

Hinweis

Die Variable lOsError gilt nur für CFile und CStdioFile Objekte. Die CMemFile Klasse behandelt diesen Fehlercode nicht.

CFileException::ErrnoToException

Wandelt einen bestimmten Laufzeitbibliotheksfehlerwert in einen CFileException aufgezählten Fehlerwert um.

static int PASCAL ErrnoToException(int nErrno);

Parameter

nErrno
Ein ganzzahliger Fehlercode, der in der Laufzeit definiert ist, enthält die Datei ERRNO.H.

Rückgabewert

Aufzählungswert, der einem bestimmten Laufzeitbibliotheksfehlerwert entspricht.

Hinweise

Eine Liste der möglichen Aufzählungswerte finden Sie CFileException::m_cause unter.

Beispiel

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

CFileException::GetErrorMessage

Ruft Text ab, der eine Ausnahme beschreibt.

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

Parameter

lpszError
[in, out] Zeigen Sie auf einen Puffer, der eine Fehlermeldung empfängt.

nMaxError
[in] Die maximale Anzahl von Zeichen, die der angegebene Puffer enthalten kann. Dies schließt das Endzeichen NULL ein.

pnHelpContext
[in, out] Zeigen Sie auf eine nicht signierte ganze Zahl, die die Hilfekontext-ID empfängt. Wenn NULL, wird keine ID zurückgegeben.

Rückgabewert

TRUE wenn die Methode erfolgreich war; andernfalls FALSE.

Hinweise

Wenn der angegebene Puffer zu klein ist, wird die Fehlermeldung abgeschnitten.

Beispiel

Im folgenden Beispiel wird CFileException::GetErrorMessage verwendet.

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

Enthält Werte, die von einem CFileException-Enumerationstyp definiert wurden.

int m_cause;

Hinweise

Dieses Datenelement ist eine öffentliche Variable vom Typ int. Die Enumeratoren und ihre Bedeutungen lauten wie folgt:

Fehler Wert und Bedeutung
CFileException::none 0: Es ist kein Fehler aufgetreten.
CFileException::genericException 1: Ein nicht angegebener Fehler ist aufgetreten.
CFileException::fileNotFound 2: Die Datei konnte nicht gefunden werden.
CFileException::badPath 3: Der Gesamte oder Teil des Pfads ist ungültig.
CFileException::tooManyOpenFiles 4: Die zulässige Anzahl geöffneter Dateien wurde überschritten.
CFileException::accessDenied 5: Auf die Datei konnte nicht zugegriffen werden.
CFileException::invalidFile 6: Es wurde versucht, ein ungültiges Dateihandle zu verwenden.
CFileException::removeCurrentDir 7: Das aktuelle Arbeitsverzeichnis kann nicht entfernt werden.
CFileException::directoryFull 8: Es gibt keine weiteren Verzeichniseinträge.
CFileException::badSeek 9: Fehler beim Festlegen des Dateizeigers.
CFileException::hardIO 10: Hardwarefehler.
CFileException::sharingViolation 11: SHARE.EXE wurde nicht geladen, oder eine freigegebene Region wurde gesperrt.
CFileException::lockViolation 12: Es wurde versucht, eine bereits gesperrte Region zu sperren.
CFileException::diskFull 13: Der Datenträger ist voll.
CFileException::endOfFile 14: Das Ende der Datei wurde erreicht.

Hinweis

Diese CFileException-Ursachenenumeratoren unterscheiden sich von den CArchiveException-Ursachenenumeratoren.

Hinweis

CArchiveException::generic ist veraltet. Verwenden Sie stattdessen genericException. Wenn generic sie in einer Anwendung verwendet und mit /clrdieser erstellt wird, sind die resultierenden Syntaxfehler nicht leicht zu entschlüsseln.

Beispiel

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

Enthält den Betriebssystemfehlercode für diese Ausnahme.

LONG m_lOsError;

Hinweise

Eine Liste der Fehlercodes finden Sie im technischen Handbuch des Betriebssystems. Dieses Datenelement ist eine öffentliche Variable vom Typ LONG.

CFileException::m_strFileName

Enthält den Namen der Datei für diese Ausnahmebedingung.

CString m_strFileName;

CFileException::OsErrorToException

Gibt einen Enumerator zurück, der einem bestimmten lOsError Wert entspricht. Wenn der Fehlercode unbekannt ist, wird die Funktion zurückgegeben CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

Parameter

lOsError
Ein betriebssystemspezifischer Fehlercode.

Rückgabewert

Aufzählungswert, der einem bestimmten Betriebssystemfehlerwert entspricht.

Beispiel

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

CFileException::ThrowErrno

Erstellt ein CFileException Objekt, das einem bestimmten nErrno Wert entspricht, und löst dann die Ausnahme aus.

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

Parameter

nErrno
Ein ganzzahliger Fehlercode, der in der Laufzeit definiert ist, enthält die Datei ERRNO.H.

lpszFileName
Ein Zeiger auf die Zeichenfolge, die den Namen der Datei enthält, die die Ausnahme verursacht hat, falls verfügbar.

Beispiel

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

CFileException::ThrowOsError

Löst einen CFileException entsprechenden Wert aus lOsError . Wenn der Fehlercode unbekannt ist, löst die Funktion eine Ausnahme aus, die als CFileException::generic.

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

Parameter

lOsError
Ein betriebssystemspezifischer Fehlercode.

lpszFileName
Ein Zeiger auf die Zeichenfolge, die den Namen der Datei enthält, die die Ausnahme verursacht hat, falls verfügbar.

Beispiel

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

Siehe auch

CException Klasse
Hierarchiediagramm
Ausnahmeverarbeitung