CFileException
Klasa
Reprezentuje warunek wyjątku związanego z plikiem.
Składnia
class CFileException : public CException
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
CFileException::CFileException |
CFileException Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
CFileException::ErrnoToException |
Zwraca kod przyczyny odpowiadający numerowi błędu czasu wykonywania. |
CFileException::GetErrorMessage |
Pobiera komunikat opisujący wyjątek. |
CFileException::OsErrorToException |
Zwraca kod przyczyny odpowiadający kodowi błędu systemu operacyjnego. |
CFileException::ThrowErrno |
Zgłasza wyjątek pliku na podstawie numeru błędu środowiska uruchomieniowego. |
CFileException::ThrowOsError |
Zgłasza wyjątek pliku na podstawie numeru błędu systemu operacyjnego. |
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CFileException::m_cause |
Zawiera przenośny kod odpowiadający przyczynie wyjątku. |
CFileException::m_lOsError |
Zawiera powiązany numer błędu systemu operacyjnego. |
CFileException::m_strFileName |
Zawiera nazwę pliku dla tego wyjątku. |
Uwagi
Klasa CFileException
zawiera publiczne składowe danych, które przechowują przenośny kod przyczyny i numer błędu specyficzny dla systemu operacyjnego. Klasa udostępnia również statyczne funkcje składowe do zgłaszania wyjątków plików oraz zwracania kodów przyczyn zarówno błędów systemu operacyjnego, jak i błędów czasu wykonywania języka C.
CFileException
obiekty są konstruowane i zgłaszane w CFile
funkcjach składowych oraz w funkcjach składowych klas pochodnych. Dostęp do tych obiektów można uzyskać w zakresie CATCH
wyrażenia. W przypadku przenośności użyj tylko kodu przyczyny, aby uzyskać przyczynę wyjątku. Aby uzyskać więcej informacji na temat wyjątków, zobacz artykuł Obsługa wyjątków (MFC).
Hierarchia dziedziczenia
CFileException
Wymagania
Nagłówek: afx.h
CFileException::CFileException
CFileException
Tworzy obiekt, który przechowuje kod przyczyny i kod systemu operacyjnego w obiekcie.
CFileException(
int cause = CFileException::none,
LONG lOsError = -1,
LPCTSTR lpszArchiveName = NULL);
Parametry
cause
Wyliczona zmienna typu wskazująca przyczynę wyjątku. Zobacz CFileException::m_cause
listę możliwych wartości.
lOsError
Przyczyna wyjątku specyficzna dla systemu operacyjnego, jeśli jest dostępna. Parametr lOsError
zawiera więcej informacji niż cause
to robi.
lpszArchiveName
Wskazuje ciąg zawierający nazwę CFile
obiektu powodującego wyjątek.
Uwagi
Nie używaj tego konstruktora bezpośrednio, ale raczej wywołaj funkcję AfxThrowFileException
globalną .
Uwaga
Zmienna lOsError
ma zastosowanie tylko do CFile
obiektów i .CStdioFile
Klasa CMemFile
nie obsługuje tego kodu błędu.
CFileException::ErrnoToException
Konwertuje daną wartość błędu biblioteki czasu wykonywania na CFileException
wyliczona wartość błędu.
static int PASCAL ErrnoToException(int nErrno);
Parametry
nErrno
Kod błędu liczby całkowitej zdefiniowany w pliku ERRNO.H
dołączania w czasie wykonywania .
Wartość zwracana
Wyliczona wartość odpowiadająca danej wartości błędu biblioteki czasu wykonywania.
Uwagi
Zobacz CFileException::m_cause
listę możliwych wyliczonych wartości.
Przykład
ASSERT(CFileException::ErrnoToException(EACCES) ==
CFileException::accessDenied);
CFileException::GetErrorMessage
Pobiera tekst opisujący wyjątek.
virtual BOOL GetErrorMessage(
LPTSTR lpszError,
UINT nMaxError,
PUINT pnHelpContext = NULL) const;
Parametry
lpszError
[in, out] Wskaźnik do buforu, który odbiera komunikat o błędzie.
nMaxError
[in] Maksymalna liczba znaków, które może pomieścić określony bufor. Obejmuje to znak zakończenia NULL
.
pnHelpContext
[in, out] Wskaźnik do niepodpisanej liczby całkowitej, która otrzymuje identyfikator kontekstu pomocy. Jeśli NULL
nie zostanie zwrócony żaden identyfikator.
Wartość zwracana
TRUE
jeśli metoda zakończyła się pomyślnie; w przeciwnym razie FALSE
.
Uwagi
Jeśli określony bufor jest za mały, komunikat o błędzie zostanie obcięty.
Przykład
W poniższym przykładzie użyto metody 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
Zawiera wartości zdefiniowane przez CFileException
typ wyliczony.
int m_cause;
Uwagi
Ten element członkowski danych jest publiczną zmienną typu int
. Moduły wyliczające i ich znaczenie są następujące:
Błąd | Wartość i znaczenie |
---|---|
CFileException::none |
0: Nie wystąpił błąd. |
CFileException::genericException |
1: Wystąpił nieokreślony błąd. |
CFileException::fileNotFound |
2: Nie można znaleźć pliku. |
CFileException::badPath |
3: Wszystkie lub część ścieżki są nieprawidłowe. |
CFileException::tooManyOpenFiles |
4: Przekroczono dozwoloną liczbę otwartych plików. |
CFileException::accessDenied |
5: Nie można uzyskać dostępu do pliku. |
CFileException::invalidFile |
6: Podjęto próbę użycia nieprawidłowego dojścia do pliku. |
CFileException::removeCurrentDir |
7: Nie można usunąć bieżącego katalogu roboczego. |
CFileException::directoryFull |
8: Nie ma więcej wpisów katalogu. |
CFileException::badSeek |
9: Wystąpił błąd podczas próby ustawienia wskaźnika pliku. |
CFileException::hardIO |
10: Wystąpił błąd sprzętowy. |
CFileException::sharingViolation |
11: SHARE.EXE nie załadowano lub region udostępniony został zablokowany. |
CFileException::lockViolation |
12: Nastąpiła próba zablokowania regionu, który został już zablokowany. |
CFileException::diskFull |
13: Dysk jest pełny. |
CFileException::endOfFile |
14: Osiągnięto koniec pliku. |
Uwaga
Te CFileException
wyliczenia przyczyn różnią się od CArchiveException
modułów wyliczających przyczyn.
Uwaga
CArchiveException::generic
jest przestarzały. Użycie w zamian parametru genericException
. Jeśli generic
jest używany w aplikacji i skompilowany za pomocą /clr
polecenia , wynikowe błędy składni nie są łatwe do odszyfrowania.
Przykład
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
Zawiera kod błędu systemu operacyjnego dla tego wyjątku.
LONG m_lOsError;
Uwagi
Zapoznaj się z podręcznikiem technicznym systemu operacyjnego, aby zapoznać się z listą kodów błędów. Ten element członkowski danych jest publiczną zmienną typu LONG
.
CFileException::m_strFileName
Zawiera nazwę pliku dla tego warunku wyjątku.
CString m_strFileName;
CFileException::OsErrorToException
Zwraca moduł wyliczający odpowiadający danej lOsError
wartości. Jeśli kod błędu jest nieznany, funkcja zwraca wartość CFileException::generic
.
static int PASCAL OsErrorToException(LONG lOsError);
Parametry
lOsError
Kod błędu specyficzny dla systemu operacyjnego.
Wartość zwracana
Wyliczona wartość odpowiadająca danej wartości błędu systemu operacyjnego.
Przykład
ASSERT(CFileException::OsErrorToException(ERROR_ACCESS_DENIED) ==
CFileException::accessDenied);
CFileException::ThrowErrno
CFileException
Tworzy obiekt odpowiadający danej nErrno
wartości, a następnie zgłasza wyjątek.
static void PASCAL ThrowErrno(int nErrno, LPCTSTR lpszFileName = NULL);
Parametry
nErrno
Kod błędu liczby całkowitej zdefiniowany w pliku ERRNO.H
dołączania w czasie wykonywania .
lpszFileName
Wskaźnik do ciągu zawierającego nazwę pliku, który spowodował wyjątek, jeśli jest dostępny.
Przykład
CFileException::ThrowErrno(EACCES); // "access denied"
CFileException::ThrowOsError
Zgłasza wartość odpowiadającą CFileException
danej lOsError
wartości. Jeśli kod błędu jest nieznany, funkcja zgłasza wyjątek zakodowany jako CFileException::generic
.
static void PASCAL ThrowOsError(LONG lOsError, LPCTSTR lpszFileName = NULL);
Parametry
lOsError
Kod błędu specyficzny dla systemu operacyjnego.
lpszFileName
Wskaźnik do ciągu zawierającego nazwę pliku, który spowodował wyjątek, jeśli jest dostępny.
Przykład
CFileException::ThrowOsError(ERROR_ACCESS_DENIED); // "access denied"