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

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

 

Таблица 4.1. Характерные ошибки операций ввода-вывода

Номер Название Операция Описание
            Disk read error     Disk write error     File not assigned   File not open   File not open for input Read     CloseFile, Write, WriteIn, Flush   Reset, Rewrite, Append, Rename, Erase   CloseFile, Read, Write, Seek, Eof, FilePos, FileSize, Flush, Block- Read, BlockWrite   Read, Readln, Eof, Eoln, SeekEof, SeekEoln Попытка чтения за пределами файла.   Ошибка записи, например при нехватке места на диске.   В файловой переменной нет ссылки на файл. Например, не был вызван метод AssignFile().   Файл не был открыт.   Файл открыт не в режиме для чтения.

 

Достаточно опытный программист может позволить себе некоторую вольность и отключить реакцию Delphi на ошибки ввода-вывода. Для этого в листинге перед процедурами работы с файлами укажите соответствующую директиву компилятору {$I-}, но в этом случае обработка ошибок перекладывается на вас. Не забудьте все вернуть в исходное состояние, включив «обесточенную» опцию {$I+}. Код возможной ошибки возвратит метод:

 

function IOResult: Integer;

 

Если же все завершилось удачно, то результатом окажется ноль. Продемонстрируем это на примере. Взгляните на следующие абсолютно стандартные строки кода:

 

var F : File;

Buffer : array[0..255] of byte;

Begin

AssignFile(F,'c:\test.tst');

TRY

Reset(f,255);

BlockRead(F,Buffer,1);

FINALLY

CloseFile(f);

END;

End.

Однако вполне работоспособный код откажется работать, если в корне диска C:\ не окажется тестового файла с названием test.tst. В таком случае на экране компьютера появится сообщение, информирующее нас о таком прискорбном факте. А теперь применим наши знания относительно обработки ошибок ввода-вывода и напишем более жизнестойкие строки.

 

 

var F : File;

Buffer : array[0..255] of byte;

Begin

AssignFile(F,'c:\test.tst');

{$I-}

Reset(f,255);

ifIOResult=0 then

Begin

BlockRead(F,Buffer,1);

CloseFile(f);

End

elseWriteLn('Sorry! File not found!');

{$I+}

ReadLn;

End.








Дата добавления: 2016-03-15; просмотров: 1022;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.