Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornye_raboty_po_Informatike_2011.doc
Скачиваний:
10
Добавлен:
11.12.2018
Размер:
502.27 Кб
Скачать

4. Переименование и удаление файла – Rename, Erase.

К языковым средствам обслуживания наборов данных необходимо отнести процедуры переименования и удаления неоткрытых файлов. Использование этих процедур не зависит от типа файла.

Процедура Rename(f : file; NewName : string); переименовывает неоткрытый файл f любого типа. Новое имя задает­ся строкой NewName.

Процедура Erase(f : file); удаляет неоткрытый внешний файл любого типа, задаваемый перемен­ной f.

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

Пример для Pascal. Удаление и переименование файла.

Var

f : file;

Ch . char;

St : string;

Begin

Write('Введите имя файла : ');

Readln(St); { чтение имени }

Assign(f, St); { назначить имя файловой переменной }

Wгite('Удалить файл (У), Переименовать(П), Выход(В)');

Readln(Ch);

case Ch of

'У,'у' : Erase(f); { удаление файла }

'П','п' : begin

Write(‘Введите новое имя файла : ');

Readln(St);

Rename(f, St); { переименование файла }

end;

'В','в' : halt(l);

end; {case}

End.

3.2.2. Типизированные файлы.

К типизированным файлам относятся файлы строго определен­ного типа. Стандартное задание в программе такой файловой пере­менной осуществляется следующим образом:

Type

FileRec = record

end;

Var Ft : file of FileRec;

1. Длина записи.

Если в текстовых файлах содержимое рассматривается как наборы символов, подготовленные специальным образом с учетом общепринягтых соглашений о представлении текстовой информации, то в типи­зированных файлах их содержимое рассматривается как последова­тельность записей определенного типа. Единицей измерения такого набора данных является сама запись. Длина записи определяется как Sizeof(FileRec).

2. Позиционирование записи в файле.

Процедура Seek(f; NumRec: Longint) устанавливает текущую фай­ловую переменную f на запись с номером NumRec; f - файловая переменная для типизированных и нетипизированных наборов данных. При открытии типизированного файла текущая позиция для работы с ним установлена на начало первой записи, которая по принятым соглашениям имеет номер 0, т.е. номер физической записи на еди­ницу меньше номера логической записи. Это небольшое несоответ-

ствие в номерах может служить причиной возникновения ошибок чте­ния-записи, что в результате может привести к нарушению целост­ности важной информации. Положение усугубляется тем, что невер­ное позиционирование на запись с помощью процедуры Seek, как правило, не приводит к каким-либо видимым ошибкам ввода-вывода, на которые всегда можно отреагировать. Исключение составляют си­туации, когда нет доступа к файлу, файл не открыт или назначено позиционирование на несуществующую запись, такие ситуации обра­батываются с помощью функции lOresult.

Типизированные файлы ( в отличие от текстовых) позволяют организовать работу в режиме чтения-записи. Эта возможность играет решающую роль при опреде­лении, каким типам файлов отдать предпочтение для большинства прикладных задач. Информация в типизированных наборах данных представлена в том же виде, как и в памяти машины во время вы­полнения программы, поэтому не надо отслеживать управляющие пос­ледовательности типа конец строки или возврат каретки. Идентифи­кация соответствия типа записи и конкретной физической информа­ции требует незначительной части ресурсов системы.

3. Вспомогательные функции FilePos и File Size.

Для работы с файлами прямого доступа используются две специ­альные функции:

FilePos(F) : Longint - возвращает для файла F текущую файловую позицию (номер записи, на которую она установлена) в виде значения типа Longint;

FileSize(F) : Longint - возвращает для файла F его размер (количество записей) в виде значения типа Longint.

Для пустого файла вызов FileSize возвращает значение 0. Лока­лизация ошибок при обращении к внешним носителям для обоих функ­ций производится через lOresult.

Для того чтобы очередная запись могла быть записана в конец типизированного файла, необходимо перевести текущую файловую по­зицию в конец файла. Когда создается новый файл, это происходит автоматически после формирования каждой очередной записи. Если файл ухе создан и файловая позиция, установленная по Seek(), на­ходится где-нибудь в начале файла (FilePos(F) < FileSize(F)), то в конец файла ее позволяет перевести вызов Seek(F, FileSize(F));

В каждом файле число логических и физических записей совпадает, а при позиционировании номер физической записи на единицу меньше номера логической записи.

Пример для Pascal:

Type Klient= record

Number : integer; { номер}

Marka : string[20]; { марка автомобиля }

FIO : string[40]; { фамилия,инициалы владельца }

adres : string[88] { адрес владельца }

end;

Var M : Klient;

F : file of Klient;

Begin

With M do begin Number :=43;

Marka :=’Запорожец’;

FIO := ‘Ильин М.И.';

Adres :=’ул. Болтунов, 5' end;

Assign(f,’RecKl.ttt’);

Rewrite(f);

Write(f);

Close(f);

End.

Контрольные вопросы

  1. Что такое запись и из чего она состоит?

  2. Какие есть способы обращения к полям записи?

  3. Перечислите основные действия при работе с файлами.

  4. Что такое файловая переменная и как ее использовать?

  5. Обязательно ли задавать полное имя открываемого файла (со всем путем к нему)?

  6. В чем отличие типизированного файла от нетипизированного?

  7. В чем приемущество нетекстовых файлов от текстовых? В каких случаях удобно исползовать те и другие?

y = sqr(cos((sqr(x)-3*x+10)/(sqr(x)*sqr(x)*sqr(x)*x - sqr(x)*sqr(x)*x + sqr(x)*x+100))

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]