Udostępnij za pośrednictwem


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

CObject

CException

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ę AfxThrowFileExceptionglobalną .

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.Hdołą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 NULLnie 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ą /clrpolecenia , 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.Hdołą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"         

Zobacz też

CException Klasa
Wykres hierarchii
Przetwarzanie wyjątków