Ошибки ввода-вывода

Для выяснения наличия ошибок ввода-вывода необходимо непосредственно после вызова процедуры ввода-вывода, такой как Rewrite или Reset, вызвать функцию IOResult. Функция IOResult возвращает результат последней выполненной операции ввода-вывода. Если IOResult возвращает 0, это означает, что операция была выполнена успешно.

Для выполнения проверки ввода-вывода с помощью функции IOResult необходимо вначале отключить автоматическую проверку ввода-вывода. Для включения и отключения проверки ошибок ввода-вывода служит директива компилятора $I. Обычно автоматическую проверку ввода-вывода отключают перед вызовом процедуры ввода-вывода и снова включают сразу после выполнения этого вызова:

 

{$I-}

Вызов процедуры ввода-вывода

{$I+}

 

Следующий пример иллюстрирует выполнение проверки ввода-вывода и считывание текста из файла только в случае успешного его открытия.

 

program Project1;

 

{$APPTYPE CONSOLE}

 

uses

SysUtils;

var

myFile: Text;

line: string;

fileName: string;

begin

fileName := 'data.txt';

AssignFile(myFile, fileName);

{$I-}

Reset(myFile);

{$I+}

if IOResult = 0 then

begin

Readln(myFile, line);

Writeln(line);

CloseFile(myFile);

end else

Writeln('can not open file: ', fileName);

Readln;

end.

 

Помните, что после обращения к процедуре ввода-вывода функцию IOResult можно вызывать только один раз. Это обусловлено тем, что она сбрасывает результат выполнения последней операции ввода-вывода в 0. Поэтому, если вызвать функцию IOResult дважды подряд, первое обращение к ней правильно сообщит об ошибке, но второе обращение сообщит (ошибочно), что операция была выполнена успешно.