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

3. Файлы. Основные понятия и операции

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

А как сохранить информацию после завершения работы программы? Для этого используют структуру данных, которую называют файл.

Файл – это структура данных, обладающая двумя основными свойствами:

  • Обычно она располагается на каком-либо внешнем носителе (например, магнитная лента, магнитный или оптический диск) и, следовательно, ее размер может быть значительно больше, чем размеры других типов структур данных;

  • Ее время жизни может значительно превышать время выполнения программы, создавшей ее.

Файловая переменная – переменная в программе, которая используется для описания структуры файла и логических операций с файлом (операций

на уровне программы).

Формат описания файловой переменной:

<имя файловой переменной> : file of T; тип компонентов файла}

Перед выполнением любой операции над файлом файловая переменная должна быть предварительно инициализирована – сопоставлена с физическим файлом:

аssign (<имя файловой переменной>, <путь к файлу и его имя>);

Наиболее распространенными являются файлы с последовательным доступом к их компонентам.

3.1. Последовательный доступ к компонентам файла

Доступ к компонентам файла осуществляется либо в режиме записи, либо

в режиме чтения.

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

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

Основные операции над файлами с последовательным доступом к их компонентам таковы.

Открытие файла. Операция открытия получает в качестве параметров имя файла и режим доступа (чтение или запись).

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

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

Чтение. Операция чтения передает содержимое текущего компонента (определяемого указателем текущей позиции файла) в переменную программы.

Запись. Операция записи создает новый компонент в текущей позиции файла и передает значение программной переменной этому новому компоненту.

Проверка конца файла (Eof End of file). Операция чтения не может быть выполнена, если указатель текущей позиции достиг конца файла. Так как длина файла не фиксирована, требуется проводить явную проверку на достижение конца файла.

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

Схема формирования файла

var

F: file of T;

a: T;

begin

Assign(F, <путь к файлу и его имя>);

Rewrite(F); { Открытие файла для записи – создание пустого файла }

<цикл формирования файла>

begin

<получить значение а>;

write(F, a); { записать а в конец файла }

end;

Close(F); { закрыть файл }

end.

Схема просмотра (использования файла)

var

F: file of T;

a: T;

begin

Assign(F, <путь к файлу и его имя>);

Reset(F); { Открытие файла для чтения, Файл уже существует } while not Eof(F) do begin { пока не конец файла выполнять} read(F, a); { прочитать данные из файла в переменную а }

<использовать а >;

end;

Close(F); { закрыть файл }

end.