Delphi для профессионалов



 

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


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

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

При возникновении ошибок ввода/вывода в функциях, использующих файловые переменные, генерируется исключительная ситуация класса EinOutError. Но так происходит только в том случае, если включен контроль ошибок ввода/вывода. Для этого используются соответствующие директивы компилятора:

  • {$I+}— контроль включен (установлен по умолчанию); 
  • {$I-} — контроль отключен.

Класс EinOutError отличается тем, что у него есть поле ErrorCode. При возникновении этой исключительной ситуации вы можете получить его значение и принять решение. Основные коды имеют такие значения:

  •  2 — файл не найден;
  •  3 — неверное имя файла;
  •  4 — слишком много открытых файлов;
  •  5 — доступ запрещен;
  •  100 — достигнут конец файла;
  •  101 — диск переполнен;
  •  106 — ошибка ввода.

При отключенном контроле в случае возникновения ошибки выполнение программы продолжается без остановки. Однако в этом случае устранение возможных последствий ошибки возлагается на разработчика. Для этого применяется функция

function lOResult: Integer;

которая возвращает значение 0 при отсутствии ошибок.