Ошибки открытия файла

Попытка открыть
файл может завершиться неудачей и вызвать ошибку времени выполнения программы.
Причин неудачи при открытии файлов может быть несколько. Например, программа
попытается открыть файл на гибком диске, который не готов к работе (не закрыта
шторка накопителя, или диск не вставлен в накопитель). Другая причина —
отсутствие открываемого в режиме добавления файла (файла нет — добавлять
некуда).


При запуске
программы из Delphi в случае ошибки во время открытия файла возникает
исключение, и на экране появляется диалоговое окно с сообщением (рис.
7.2).



Рис. 7.2.
Пример сообщения об ошибке открытия файла (программа запущена из Delphi)


Если программа
запускается из Windows, то окно с сообщением об ошибке выглядит иначе (рис.
7.3).



Рис. 7.3.
Пример сообщения об ошибке открытия файла . (программа запущена из Windows)


Программа может
взять на себя задачу контроля за результатом выполнения инструкции открытия
файла. Сделать это можно, проверив значение функции IOResult (input-Output Result —
результат ввода/вывода). Функция IOResuit возвращает 0, если операция
ввода/вывода завершилась успешно; в противном случае — код ошибки (не
ноль).


Для того чтобы
программа смогла проверить результат выполнения операции ввода/вывода, нужно
разрешить ей это делать. Для этого надо перед инструкцией вызова процедуры
открытия файла поместить директиву компилятору — строку {$I-}, которая запрещает
автоматическую обработку ошибок ввода/вывода. Эта директива сообщает
компилятору, что программа берет на себя контроль ошибок. После инструкции
открытия файла следует поместить директиву {$I+}, восстанавливающую режим
автоматической обработки ошибок ввода/вывода.


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



Рис. 7.4.
Алгоритм открытия файла с обработкой возможной ошибки


Ниже приведен
фрагмент программы, реализующий приведенный выше алгоритм открытия
файла.



AssignFile(f,filename);


{$I-}


Append(f) // открыть для добавления


{$I+}


if IOResult<> 0 // ошибка открытия


then Rewrite(f); // открыть для записи


// здесь открыт существующий или новый файл


Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: