Изменение реакции на ошибку
По умолчанию любая ошибка ввода или вывода вызывает аварийную остановку работы программы. Однако существует возможность отключить такое строгое реагирование; в этом случае программа сможет либо игнорировать эти ошибки (что, правда, далеко не лучшим образом отразится на результатах ее работы), либо обрабатывать их при помощи системной функции 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+}
Номер ошибки | Описание ошибки | Генерирующие процедуры | |
2 | File not found | Файл не найден | append, erase, rename, reset, rewrite |
3 | Path not found | Директория не найдена | append, chdir, erase, mkdir, rename, reset, rewrite, rmdir |
4 | Too many open files | Открыто более 15 файлов одновременно | append, reset, rewrite |
5 | File access denied | Отказ в доступе к файлу | append, blockread, blockwrite, erase, mkdir, read, readln, rename, reset, rewrite, rmdir, write, writeln |
12 | Invalid file access code | Попытка использовать текстовый файл как типизированный или наоборот | append, reset |
16 | Cannot remove current directory | Невозможно удалить заданную директорию | rmdir |
100 | Disk read error | Попытка чтения после конца файла | read, readln |
101 | Disk write error | Ошибка записи на диск (диск полон) | close, write, writeln |
102 | File not assigned | Файл не назначен | append, erase, rename, reset, rewrite |
103 | File not open | Файл не открыт{бинарные файлы} | blockread, blockwrite, close, eof, filepos, filesize, read, seek, write |
104 | File not open for input | Файл не открыт для ввода {текстовые файлы} | eof, eoln, read, readln, seekeof, seekeoln |
105 | File not open for output | Файл не открыт для вывода {текстовые файлы} | write, writeln |
106 | Invalid numeric format | Неправильный числовой формат {текстовые файлы} | read, readln |
152 | Drive not ready | Задано неверное имя диска | append, erase, rename, reset, rewrite |
Дата добавления: 2015-03-19; просмотров: 702;