Ошибки ввода-вывода
Для выяснения наличия ошибок ввода-вывода необходимо непосредственно после вызова процедуры ввода-вывода, такой как 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 дважды подряд, первое обращение к ней правильно сообщит об ошибке, но второе обращение сообщит (ошибочно), что операция была выполнена успешно.