Контроль ошибок ввода/вывода
При работе с файлами необходимо предусмотреть обработку возможных ошибок. Практика показывает, что именно операции ввода/вывода вызывают большую часть ошибок, возникающих по самым разным причинам.
Контроль над ошибками ввода/вывода зависит от применяемых функций. При использовании доступа через Win32 API все функции возвращают код ошибки Windows, который и нужно проанализировать.
При возникновении ошибок ввода/вывода в функциях, использующих файловые переменные, генерируется исключительная ситуация класса EInOutError. Но так происходит только в том случае, если включен контроль ошибок ввода/вывода. Для этого включения используются соответствующие директивы компилятора:
· {$I+}— контроль включен (установлен по умолчанию);
· ($I-) — контроль отключен.
При возникновении исключительной ситуации можно получить значение кода ошибки ErrorCode и затем его обработать.
Основные коды имеют такие значения:
· 2 — файл не найден;
· 3 — неверное имя файла;
· 4 — слишком много открытых файлов;
· 5— доступ запрещен;
· 100 — достигнут конец файла;
· 101 — диск переполнен;
· 106 — ошибка ввода.
При отключенном контроле в случае возникновения ошибки выполнение программы продолжается без остановки. Однако в этом случае устранение возможных последствий ошибки должен взять на себя разработчик.
Сделать это можно, проверив значение функции IOResult.
function IOResult: integer; ,
которая возвращает значение 0 при отсутствии ошибок, в противном случае – код ошибки.
Пример:
В этом примере приведен фрагмент программы, реализующий приведенный выше алгоритм открытия файла.
AssignFile(f, filename);
{$I-}
Append(f);
{$I+}
if IOResult <> 0
then Rewrite(f);