Контроль ошибок ввода/вывода

При работе с файлами необходимо предусмотреть обработку возможных ошибок. Практика показывает, что именно операции ввода/вывода вызывают большую часть ошибок, возникающих по самым разным причинам.

Контроль над ошибками ввода/вывода зависит от применяемых функций. При использовании доступа через 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);