Читаем Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT полностью

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

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

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

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

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

C++
C++

С++ – это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы. Ключевым понятием С++ является класс. Класс – это тип, определяемый пользователем. Классы обеспечивают сокрытие данных, гарантированную инициализацию данных, неявное преобразование типов для типов, определенных пользователем, динамическое задание типа, контролируемое пользователем управление памятью и механизмы перегрузки операций. С++ предоставляет гораздо лучшие, чем в C, средства выражения модульности программы и проверки типов. В языке есть также усовершенствования, не связанные непосредственно с классами, включающие в себя символические константы, inline-подстановку функций, параметры функции по умолчанию, перегруженные имена функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены возможности языка C по работе с основными объектами аппаратного обеспечения (биты, байты, слова, адреса и т.п.). Это позволяет весьма эффективно реализовывать типы, определяемые пользователем. С++ и его стандартные библиотеки спроектированы так, чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка будет идти в большинстве систем, поддерживающих C. Из С++ программ можно использовать C библиотеки, и с С++ можно использовать большую часть инструментальных средств, поддерживающих программирование на C. Эта книга предназначена главным образом для того, чтобы помочь серьезным программистам изучить язык и применять его в нетривиальных проектах. В ней дано полное описание С++, много примеров и еще больше фрагментов программ.

Мюррей Хилл , Бьёрн Страуструп , Бьярн Страустрап

Программирование, программы, базы данных / Программирование / Книги по IT