Временами при работе с файлами в языке Delphi попытка открыть файл завершается неудачным образом и вызывает ошибку времени выполнения данной программы. Причинами ошибки открытия файлов Delphi могут быть следующие факторы.
К примеру, программа пытается открыть файл, расположенный на гибком диске, которой еще не готов к работе (не закрыт механизм дискового накопителя, либо диск отсутствует в накопителе).
Второй причиной может быть ситуация, когда открываемый в режиме добавления файл отсутствует (то есть, нет файла – и потому добавлять некуда). В процессе запуска программы из Delphi при возникновении ошибки в момент открытия файла появляется исключение, и на дисплее ПК высвечивается специальное диалоговое окно с сообщением об ошибке открытия файла:
Если запуск программы проводится из системы Windows, то внешний вид окна с сообщением, сигнализирующем о возникновении ошибки при открытии файла, представится следующим образом
Для того, чтобы программа самостоятельно контролировала результат исполнения операции открытия файла, нужно провести проверку значения функции IOResult (что означает результат ввода/вывода: Input-Output – ввод-вывод, а Result — результат). Функция IOResult принимает значение 0 в случае успешного завершения операции ввода/вывода, иначе возникает код ошибки (не 0).
Автоматическая обработка ошибок Delphi
Для обеспечения возможности проверки программой результата выполнения инструкций ввода/вывода следует разрешить программе это делать. Поэтому перед инструкцией, осуществляющей вызов процедуры открытия файла, необходимо указать директиву компилятору – строку {$I-} для запрета автоматической обработки возможных ошибок ввода/вывода.
Данная директива как бы сигнализирует компилятору, что программа сама будет осуществлять контроль возможных ошибок. Следом за инструкцией открытия файла не забудьте указать директиву {$I+} для восстановления автоматической обработки возможных ошибок ввода/вывода.
На рис. ниже представим блок-схему алгоритма, реализующего открытие файла для добавления, которое обеспечит создание файла ( и в результате устранит ошибку, возникающую при возможности открытия несуществующего файла) в том случае, если открываемый для добавления файл отсутствует на диске.
Предложим фрагмент программы, который реализует вышеприведенный алгоритм действий.
AssignFile(fn,filename);
{$I-}
Append(fn) // открываем файл для добавления в него информации
{$I+}
if IOResult<> 0 // ошибка открытия файла then
Rewrite(fn); // открыть файл для записи
// здесь открыт существующий или новый файл
. . .
Перед окончательным завершением своей работы программой должны быть закрыты все открытые файлы. Чтобы это осуществить в языке Delphi, нужно сделать вызов процедуры close. Данная процедура содержит всего лишь один параметр – наименование файловой переменной.
Пример
Close(fn);
. . .
откуда fn обозначает имя файловой переменной. Итак, мы разобрали некоторые ошибки открытия файлов Delphi. Двигаемся дальше.