Поделиться через


Класс CFileException

Представляет состояние, связанное с файлом исключения.

Синтаксис

class CFileException : public CException

Участники

Открытые конструкторы

Имя Описание
CFileException::CFileException Формирует объект CFileException.

Открытые методы

Имя Описание
CFileException::ErrnoToException Возвращает код причины, соответствующий номеру ошибки во время выполнения.
CFileException::GetErrorMessage Извлекает сообщение, описывающее исключение.
CFileException::OsErrorToException Возвращает код причины, соответствующий коду ошибки операционной системы.
CFileException::ThrowErrno Создает исключение файла на основе номера ошибки среды выполнения.
CFileException::ThrowOsError Создает исключение файла на основе номера ошибки операционной системы.

Открытые члены данных

Имя Описание
CFileException::m_cause Содержит переносимый код, соответствующий причине исключения.
CFileException::m_lOsError Содержит связанный номер ошибки операционной системы.
CFileException::m_strFileName Содержит имя файла для этого исключения.

Замечания

Класс CFileException включает общедоступные члены данных, которые содержат переносимый код причины и номер ошибки для конкретной операционной системы. Класс также предоставляет статические функции-члены для создания исключений файлов и для возврата кодов причин для ошибок операционной системы и ошибок времени выполнения C.

CFileException объекты создаются и создаются в CFile функциях-членах и в функциях-членах производных классов. Эти объекты можно получить в области CATCH выражения. Для переносимости используйте только код причины исключения. Дополнительные сведения об исключениях см. в статье "Обработка исключений( MFC)".

Иерархия наследования

CObject

CException

CFileException

Требования

Заголовок: afx.h

CFileException::CFileException

CFileException Создает объект, который хранит код причины и код операционной системы в объекте.

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

Параметры

cause
Перечисленная переменная типа, указывающая причину исключения. Список возможных значений см. в списке CFileException::m_cause .

lOsError
Причина исключения для конкретной операционной системы, если она доступна. Параметр lOsError предоставляет больше сведений, чем cause это делает.

lpszArchiveName
Указывает на строку, содержащую имя CFile объекта, вызывающего исключение.

Замечания

Не используйте этот конструктор напрямую, а вызовите глобальную функцию AfxThrowFileException.

Примечание.

Переменная lOsError применяется только к CFile объектам и CStdioFile объектам. Класс CMemFile не обрабатывает этот код ошибки.

CFileException::ErrnoToException

Преобразует заданное значение ошибки библиотеки времени выполнения в указанное CFileException значение ошибки.

static int PASCAL ErrnoToException(int nErrno);

Параметры

nErrno
Целочисленный код ошибки, определенный в файле ERRNO.Hвключения во время выполнения.

Возвращаемое значение

Перечисленное значение, соответствующее заданному значению ошибки библиотеки времени выполнения.

Замечания

Список возможных перечисленных значений см. в списке CFileException::m_cause .

Пример

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

CFileException::GetErrorMessage

Извлекает текст, описывающий исключение.

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

Параметры

lpszError
[in, out] Указатель на буфер, получающий сообщение об ошибке.

nMaxError
[in] Максимальное количество символов, которые может содержать указанный буфер. Это включает в себя конечный NULL символ.

pnHelpContext
[in, out] Указатель на целое число без знака, которое получает идентификатор контекста справки. Если NULLидентификатор не возвращается.

Возвращаемое значение

TRUE Значение , если метод выполнен успешно; в противном случае FALSE.

Замечания

Если указанный буфер слишком мал, сообщение об ошибке усечено.

Пример

В следующем примере используется 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

Содержит значения, заданные перечисляемым типом CFileException.

int m_cause;

Замечания

Этот элемент данных является общедоступной переменной типа int. Перечислители и их значение представлено далее.

Ошибка Значение и значение
CFileException::none 0. Ошибка не произошла.
CFileException::genericException 1. Произошла неуказанная ошибка.
CFileException::fileNotFound 2. Не удалось найти файл.
CFileException::badPath 3. Недопустимо все или часть пути.
CFileException::tooManyOpenFiles 4. Превышено допустимое количество открытых файлов.
CFileException::accessDenied 5. Не удалось получить доступ к файлу.
CFileException::invalidFile 6. Была предпринята попытка использовать недопустимый дескриптор файла.
CFileException::removeCurrentDir 7. Не удается удалить текущий рабочий каталог.
CFileException::directoryFull 8. Нет дополнительных записей каталога.
CFileException::badSeek 9. Возникла ошибка, пытающаяся задать указатель файла.
CFileException::hardIO 10. Произошла ошибка оборудования.
CFileException::sharingViolation 11: SHARE.EXE не был загружен или общий регион заблокирован.
CFileException::lockViolation 12. Была предпринята попытка заблокировать регион, который уже заблокирован.
CFileException::diskFull 13. Диск заполнен.
CFileException::endOfFile 14. Достигнут конец файла.

Примечание.

Перечислители причины CFileException отличаются от перечислителей причины CArchiveException.

Примечание.

CArchiveException::generic не рекомендуется к использованию. Вместо этого используйте genericException. Если generic используется в приложении и построен с /clrпомощью, результирующая синтаксическая ошибка не легко расшифровывать.

Пример

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

Содержит код ошибки операционной системы для этого исключения.

LONG m_lOsError;

Замечания

Ознакомьтесь с техническим руководством по операционной системе с описанием кодов ошибок. Этот элемент данных является общедоступной переменной типа LONG.

CFileException::m_strFileName

Содержит имя файла для этого условия исключения.

CString m_strFileName;

CFileException::OsErrorToException

Возвращает перечислитель, соответствующий заданному lOsError значению. Если код ошибки неизвестен, функция возвращается CFileException::generic.

static int PASCAL OsErrorToException(LONG lOsError);

Параметры

lOsError
Код ошибки для конкретной операционной системы.

Возвращаемое значение

Перечисленное значение, соответствующее заданному значению ошибки операционной системы.

Пример

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

CFileException::ThrowErrno

CFileException Создает объект, соответствующий заданному nErrno значению, а затем создает исключение.

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

Параметры

nErrno
Целочисленный код ошибки, определенный в файле ERRNO.Hвключения во время выполнения.

lpszFileName
Указатель на строку, содержащую имя файла, вызвавшего исключение, если оно доступно.

Пример

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

CFileException::ThrowOsError

Создает соответствующее CFileException заданному lOsError значению. Если код ошибки неизвестен, функция создает исключение, закодированное как CFileException::generic.

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

Параметры

lOsError
Код ошибки для конкретной операционной системы.

lpszFileName
Указатель на строку, содержащую имя файла, вызвавшего исключение, если оно доступно.

Пример

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

См. также

CException Класс
Диаграмма иерархии
Обработка исключений