Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ТП.docx
Скачиваний:
10
Добавлен:
19.04.2015
Размер:
47.01 Кб
Скачать

Режимы работы файла

  1. Закрыт

{Когда файл находится в режиме «закрыт» из файла нельзя считывать информацию, записывать нельзя. Можно переименовывать, удалять, открывать }

  1. Файл открыт для чтения (read)

  2. Открыт для записи (write)

  3. Открыт для записи и чтения

Опция компиляции

{$I+} –inputoutput(когда плюс – программа прерывается при ошибке ввода вывода. Если отключена, то программа продолжает работать даже при ошибках ввода - вывода)

assignFile(f,’c:\temp\my.pas’);

{$i-}

Reset(f);

{$I+}

If IOresult <>0 then begin

Writeln(‘Ошибка открытия фала’);

Halt(1);{Завершает работу программы}

End;

Процедуры и функции модуля system

  1. Procedurerename(varf;newfn:string) {Переименовывает файл с которым связана переменнаяf. Файл получает имяnewfn. Переименовывать можно только закрытые и существующие файлы}

Assignfile(f,’temp.tmp’);

Reset(f);

……..

Close(f);

Rename(f,’new.new’);

  1. Procedure erase(varf) {Удаляет существующий и закрытый файл}

  2. Proceduremkdir(name:string) {Создает директорию по заданному пути.}

  3. Procedurechdir(newdir:string) {изменить текущую рабочую папку}

  4. Procedure rmdir(name:string) {Удаляет пустую папку}

  5. Procedure getdir(drive:byte; var dir:string); {0-активное устройство. 3-диск С. Пишет путь до текущей рабочей папки}

Процедуры и функции для типизированных файлов

  1. Procedureread(varf;v1,v2,..,vn); {Позволяет читать из файла данные которые записываются в переменныеv1,v2,..,vn}

Var f:file of integer;

X:integer;

Begin

Assignfile(f,’1.tst’);

Reset(f);

While not eof(f) do begin

Read(f,x); write(x);

End;

Closefile(f);

End.

{Пока не достигнут конец файла мы считываем из файла f число интежер и выводи на консоль}

  1. Procedurewrite(varf,v1,v2,..,vn) {записывает в файл Ф данныеv1,v2,..vn}

Var f:file of integer;

X,i:integer;

Begin

Assignfile(f,’1.tst’);

Rewrite(f);

For i:=1 to n do begin

Read(x); write(f,x);

End;

Closefile(f);

End.

{Плохое копирование}

Var fin,fout:file of byte;

B:byte;

Begin

Assignfile (fin,’test.tst’);

Reset(fin);

Assignfile(fout,’test.new’);

Rewrite(fout);

While not eof(fin) do begin

Read(fin,b);

Write(fout,b);

End;

Closefile(fin);

Closefile(fout);

End.

{Возникают проблемы с памятью}

{Просто пример}

Var fch:file of char;

Ch:char;

Begin

Assignfile(fch,’test.tst’);

Reset(fch);

For ch:=’A’ to ‘Z’ do

Write(fch,ch);

Closefile(fch);

End.

Как добиться прямого доступа??

  1. Functionfilesize(varf):longint; {Размер файла в компанентах}

  2. Functionfilepos(varf):longint; {Возвращает номер позиции текущей компоненты}

For i:=1 to filesize(f) do begin

Read(f,x);

……

End.

  1. Procedureseek(varf;n:longint); {Перемещене курсора на указанную позицию. У первого компонента ноль. У последнего Фаилсайз-1}

  2. Proceduretruncate(varf); {Обрезает фаил с текущей позиции до конца файла}

Seek(f,filesize(f) div 2);

Truncate(f);

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

Type base=….;{Базовй тип компонентов файла}

Var f:file of base; buf:base;

Begin

Assignfile(f,’test.tst’);

{$I-}

Reset(f);

{$I+}

Ioresult<>0 then begin

Writeln(‘ошибка’); halt(1);

End;

While not eof (f)do begin

Read(f,buf); {Изменение буфера

Buf:=…}

Seek(f,filepos(f)-1);

Write(f,buf);

End;

Closefile;

End.