Класс CFile. Ошибки файловых операций

   
На этом шаге мы рассмотрим общие принципы обработки исключений.

   
Легко заметить, что по целому ряду причин функция CFile::Open() иногда терпит неудачу. Одна из них -
попытка открыть несушествующий файл (не задав при этом флаг CFile::modeCreate). Открытие
файла, который находится в исключительном пользовании другого процесса, также вызовет сбой. Кроме того,
масса других факторов способна вызвать ошибки при работе с файлами.

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

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

   
Если конструктору CFile не удается открыть файл, он генерирует исключение CFileException.
Чтобы получить возможность обработать его, Вам придется включить конструктор в блок обработки исключений
try/catch:

try
{
  CFile MyFile("MyFile.old",  CFile::modeRead); 
} 
catch(CFileException * fx)
{
  TCHAR buf[255];
  fx->GetErrorMessage(buf, 255); 
  CString strPrompt(buf); 
  AfxMessageBox(strPrompt); 
}

   
Функция CFile::Open() не способна генерировать исключения. Вместо этого в нее передается необязательный
третий аргумент - указатель на объект CFileException. При сбое в открытии файла в этот объект записывается
информация о характере ошибки. Она может ,snь использована в последующем коде для предоставления
пользоdfnелю определенной информации. Вот как это сделать:

CFile MyFile; 
CFileException fx;
if (!MyFile.Open("MyFile.old", CFile::modeRead, &fx))
{
  TCHAR buf[255]; 
  fx.GetErrorMessage(buf, 255); 
  CString strPrompt(buf); 
  AfxMessageBox(strPrompt); 
}

   
На следующем шаге мы рассмотрим закрытие файла.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий