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
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 AfxThrowFileException
auf.
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 /clr
dieser 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"