Класс 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)".
Иерархия наследования
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"