Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_ лекций по Паскалю_ИиКТ.doc
Скачиваний:
12
Добавлен:
24.09.2019
Размер:
2.85 Mб
Скачать

Ошибки открытия файла

Попытка открыть файл может завершиться неудачей и вызвать ошибку времени выполнения программы. Причин неудачи открытия файлов может быть несколько. Например, если программа пытается открыть файл на гибком диске, который не готов к работе (не закрыта шторка накопителя или диск не вставлен в накопитель). Другая причина  отсутствие открываемого в режиме добавления файла (файла нет  добавлять некуда).

Выяснить, завершилась ли успехом процедура открытия файла, можно, проверив значение функции IOResult (Input-Output Result  результат ввода-вывода). Функция IOResult() возвращает 0, если операция ввода-вывода завершилась успешно; в противном случае  не ноль. Однако чтобы программа могла проверить результат выполнения операции ввода-вывода, нужно разрешить ей это делать, добавив перед вызовом процедуры открытия файла строку {$I-}. После инструкции открытия файла следует поместить {$I+}.

На рис. 27 приведена блок-схема алгоритма и фрагмента программы, обеспечивающего открытие файла для добавления, если файл уже есть на диске, или создание нового, если файла нет.

Рис. 27. Блок-схема алгоритма открытия файла с обработкой возможной ошибки

assign (f, filename) ;

{$I-} append(f) ;

{$I+} if IOResult<>0

then rewrite(f) ;

Закрытие файла

Перед завершением работы программа должна закрыть все открытые файлы. Это делается вызовом процедуры CLOSE. Процедура CLOSE имеет один параметр  имя файловой переменной.

Пример использования процедуры: close(f) ;

Ввод из файла

Язык Паскаль позволяет вводить исходные данные для программы не только с клавиатуры, но и из текстового файла. Чтобы воспользоваться этой возможностью, нужно объявить файловую переменную типа TEXT, назначить ей при помощи инструкции ASSIGN имя файла, из которого будут читаться данные, открыть файл для чтения (ввода) и прочитать (ввести) данные, используя инструкцию READ или READLN.

Открытие файла

Открытие файла для ввода (чтения) выполняется вызовом процедуры RESET, имеющей один параметр  файловую переменную. Перед вызовом процедуры RESET файловой переменной назначается имя файла вызовом процедуры ASSIGN.

Следующие инструкции открывают файл для ввода:

assign(f, ‘c:\data.txt’) ;

reset(f) ;

Если имя файла указано неверно, т. е. файла с таким именем на диске нет, то возникает ошибка времени выполнения программы. Следует отметить, что другой причиной возникновения ошибки при открытии файла, находящегося на гибком диске, может быть отсутствие готовности дисковода, проще говоря, отсутствие диска в накопителе (пользователь забыл вставить диск). Поэтому в программе следует предусмотреть возможность повторной попытки открытия файла после соответствующего ответа пользователя.

Как и при открытии файла для добавления, программа может взять на себя задачу обработки возможной ошибки при открытии файла, проверяя значение, возвращаемое функцией IOResult. Следующий фрагмент программы использует значение функции IOResult для проверки успеха открытия файла. Если попытка открыть файл вызывает ошибку, то запрашивается необходимость повторного открытия.

label

konec ;

var

f : text ;

fname : string[80] ; { имя файла }

res : integer ; { результата открытия файла }

otv : char ; {ответ на предложение повторить попытку открыть файл}

begin

fname := ‘a:\test.txt’ ;

assign ( f, fname ) ;

repeat

{$I-}

reset ( f ) ; { открыть файл для чтения }

{$I+}

res := IOResult ;

if res <> 0

then begin

write(‘ ОШИБКА: файл ‘,fname,’ не найден’) ;

writeln(‘ или диск не готов.’) ;

write(‘Повторить попытку ? (д/н)-> ‘) ;

readln ( otv ) ;

end ;

until ( res = 0 ) OR ( otv = ‘н’ ) ;

if res <> 0 then goto konec ;

{ здесь инструкции программы }

konec :

end.