По умолчанию любая ошибка ввода или вывода вызывает аварийную остановку работы программы. Однако существует возможность отключить такое строгое реагирование; в этом случае программа сможет либо игнорировать эти ошибки (что, правда, далеко не лучшим образом отразится на результатах ее работы), либо обрабатывать их при помощи системной функции IOResult: integer.
Директива компилятора {$I-} отключает режим проверки, соответственно директива {$I+} - включает.
Если при отключенной проверке правильности ввода-вывода ({$I-}) происходит ошибка, то все последующие операции ввода-вывода игнорируются - вплоть до первого обращения к функции IOResult. Ее вызов "очищает" внутренний показатель ("флаг") ошибки, после чего можно продолжать ввод или вывод.
Если функция IOResult возвращает 0, значит, операция ввода-вывода была завершена успешно. В противном случае функция вернет номер произошедшей ошибки.
Пример использования директив {$I}
flag:= false;write('Введите имя файла: ');repeat readln(s); {s:string}{$I-} assign(f,s); reset(f); case IOResult of 0: flag:= true; 3: write('Путь к файлу указан неверно. Измените путь: '); 5: write('Доступа к файлу нет. Измените имя файла: '); 152: write('Такого диска нет. Измените имя диска: '); else write('Такого файла нет. Измените имя файла: '); end; until flag;{$I+}