Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алг яз Лаб 6(I-ИСТ).doc
Скачиваний:
9
Добавлен:
05.11.2018
Размер:
244.74 Кб
Скачать

2.4.2. Обработка ошибок ввода/вывода

Целочисленная функция IOResult возвращает целое число, которое является кодом завершения предшествующей операции ввода-вывода. Если код завершения равен нулю, то команда завершилась успешно. Опросить функцию IOResult можно только один раз после каждой операции ввода/вывода, так как она обнуляется при каждом вызове. Наличие этой функции позволяет организовать пользовательскую обработку ошибок при работе с файлами. Например, рассмотрим функцию логического типа FileExists(имя_файла), возвращающую значение true, если файл, заданный в качестве параметра имя_файла, существует, и false - в противном случае:

Function FileExists(Name_of_File: String): Boolean;

Var F: File;

Begin

{Связь файловой переменной с файлом}

Assign(F, Name_of_File);

{Отключение стандартной обработки операции ввода-вывода}

{$I-}

Reset(F); {Открытие файла}

{Включение стандартной обработки операции ввода-вывода}

{$I+}

{Проверка кода завершения после выполнения Reset}

If IOResult=0 then

{Если файл был успешно открыт, т.е. существует}

FileExists:=True

Else

FileExists:=False; {Если файла нет}

Close(F) {Закрытие файла}

End;

2.4.3. Операции с каталогами

Процедура ChDir изменяет текущий каталог. Формат обращения:

ChDir (путь);

где путь – строковое выражение, содержащее путь к устанавливаемому по умолчанию каталогу.

Процедура GetDir позволяет определить имя текущего каталога (каталога по умолчанию). Формат обращения:

GetDir (устройство, каталог);

где устройство – выражение типа Word, содержащее номер устройства: 0 – устройство по умолчанию, 1 – диск А, 2 – диск В и т.д. В переменной каталог возвращается путь к текущему каталогу.

Процедура MkDir создает новый каталог на указанном логическом диске. Формат обращения:

MkDir(каталог);

где каталог – выражение типа String, задающее путь к каталогу. Последним именем в пути, т.е. именем вновь создаваемого каталога, не может быть имя уже существующего каталога.

Процедура RmDir удаляет каталог. Формат обращения:

RmDir(каталог);

Удаляемый каталог должен быть пустым, т.е. не содержать файлов или имен каталогов нижнего уровня.

2.4.4. Дополнительные операции

Сохранение информации из буфера в файл выполняется процедурой Flush. Формат обращения:

Flush(имя_файловой_переменной);

Процедура применяется к открытым выходным файлам. Она принудительно записывает данные из буфера в файл независимо от степени его заполнения. Процедура игнорируется, если файл был инициирован для чтения процедурой Reset.

2.5. Примеры

2.5.1. Работа с типизированными файлами

Сортировка целых чисел, хранящихся в файле.

Program Sorting;

Uses Crt;

Var

F: File of Integer;

i, j: LongInt;

Mas: Array[1..500] of Integer;

FSize, Tmp: LongInt;

S: String;

BEGIN

ClrScr;

Write('Enter filename: ');

Readln(S);

{открытие файла}

Assign(F, S);

{$I-}

Reset(F);

{$I+}

if IOResult <> 0 then begin

Write('Произошла ошибка при открытии файла!');

Halt; {выход из программы}

end;

{пока не достигнут конец файла, читаем данные из файла и записываем их в массив}

i:=0;

While (not Eof(F)) Do Begin

Read(F, Mas[i]); {читаем данные из файла в массив}

Write(Mas[i], ' '); {выводим на экран состояние массива}

End;

FSize:=FileSize(F);

{сортируем массив по возрастанию}

For i := 1 To FSize Do

For j := 1 To FSize-1 Do

if Mas[j] > Mas[j+1] then begin

Tmp:= Mas[j];

Mas[j]:= Mas[j+1];

Mas[j+1]:=Tmp;

end;

Writeln; Writeln('=======================');

{перезаписываем файл}

ReWrite(F);

For i := 1 To FSize Do Begin

Write(Mas[i], ' '); {выводим данные массива на экран}

Write(F, Mas[i]); {записываем данные в файл}

End;

Writeln; Write('Количество элементов в файле: ', FSize);

Close(F);

Readln;

END.