заносится код, по которому можно определить причину исключения.

Константа Причина ошибки
CFileException::none Без ошибки
CFileException::generic Неопределенная ошибка
CFileException::fileNotFound Файл не найден
CFileException::badPath Задан несуществующий путь
CFileException::tooManyOpenFiles Открыто слишком много файлов
CFileException::accessDenied Доступ к файлу закрыт
CFileException::invalidFile Использование неправильного идентификатора (дескриптора) файла
CFileException::removeCurrentDir Попытка удалить текущий каталог
CFileException::directoryFull Переполнение структуры каталогов. Невозможно создать новый каталог
CFileException::badSeek Ошибка во время перемещения указателя файлов
CFileException::hardIO Ошибка аппаратного обеспечения компьютера
CFileException::sharingViolation Программа SHARE.EXE не загружена или общая область заблокирована (locked)
CFileException::lockViolation Попытка заблокировать область файла, которая уже была заблокирована ранее
CFileException::diskFull Нет свободного пространства на диске
CFileException::endOfFile Достигнут конец файла

Так как за взаимодействие приложения с файловой системной компьютера отвечает прежде всего операционная система, то в случае ошибки она возвращает соответствующий код. В состав класса CFileException входит элемент данных m_lOsError. В него заносится код ошибки, который вернула операционная система.

Приложение Except

Приложение Except, исходный текст которого представлен в листинге 3.3, показывает как можно выполнить обработку исключительных ситуаций. Оно содержит блок try и несколько обработчиков исключений для объектов типа CMemoryException, CFileException, CException, а также универсальный обработчик. Если в блоке try вызывается исключение, связанное с ошибкой в файловой системе или системе распределения памяти, оно обрабатывается соответствующими блоками catch. Если исключение вызвано с объектом другого типа, но наследованным от класса CException, например CArchiveException, CNotSupportedException или CResourceException, тогда оно обрабатывается блоком catch для объектов CException. И наконец, если объект исключения не имеет базовым классом CException, оно обрабатывается в последнем блоке catch.

Листинг 3.3. Файл Except.cpp

#include 'stdafx.h'

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {

 try {

  CFile file('This file is absent', CFile::modeRead);

  // Здесь могут быть операторы, вызывающие другие

  // исключения

 }

 // Обработчик для исключения типа CMemoryException

 catch(CMemoryException* ptrException) {

  MessageBox(NULL,'Memory Exception', 'Exception', MB_OK | MB_ICONSTOP);

  ptrException–>Delete();

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату