КонстантаПричина ошибки
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();

 }

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

 catch(CFileException* ptrException) {

  if (ptrException–>m_cause == CFileException::fileNotFound) MessageBox(NULL,"File Not Found", "Exception", MB_OK | MB_ICONSTOP);

  else if (ptrException–>m_cause == CFileException::diskFull) MessageBox(NULL,"The disk is full", "Exception", MB_OK | MB_ICONSTOP);

  else MessageBox(NULL, "File Exception", "Exception", MB_OK | MB_ICONSTOP);

  ptrException–>Delete();

 }

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

 // классов наследованных от него

Перейти на страницу:

Все книги серии Библиотека системного программиста

Похожие книги