Файлы
Физический файл – область памяти на внешнем носителе, в которой хранится некоторая информация Логический файл – представление физического файла в программе
Для работы с файлами определяется так называемый файловый тип Файловый тип – произвольная последовательность элементов, длина которой заранее не определена, а конкретизируется в процессе выполнения программы На физическом уровне существуют файлы, но для работы с ними на уровне программ определяются т. н. файловые переменные, имеющие файловый тип (сорри за тавтологию).
Способы доступа к файловой переменной: • Последовательный • Прямой В первом случае для того, чтобы обратиться к n-ному элементу файловой переменной, необходимо последовательно обработать (n – 1) предшествующих ему элементов. Во втором – возможно прямое обращение к конкретному элементу (почти как в массиве).
Виды переменных файлового типа: • Текстовые (Text) • Файлы с типом (File of <type>) • Файлы без типа (File) File of Text <Тип>
Указатель файла • Связан с каждым открытым файлом • Другие названия: окно файла, текущая позиция файла • Определяет позицию доступа (элемент файла, с которым выполняется следующая операция ввода/вывода) • Конец файла никак не помечается!
Операции над переменными файлового типа: • Их нет Работа с файлами осуществляется с помощью процедур и функций ввода-вывода
File Бинарный файл
procedure Assign. File (var F : File; File. Name : string); Связывает файловую переменную F с файлом File. Name function File. Exists (File. Name : string) : boolean; Проверяет, существует ли файл Assign. File(F, 'C: Мои документыМои рисункиFile. Name. ini'); Assign. File(F, 'File. Name. ini'); If File. Exists('File. Name. ini') then begin bla-bla; end;
procedure Reset (var F : File; [Rec. Size : word]); открывает файл для чтения procedure Rewrite (var F : File; [Rec. Size : word]); открывает файл для записи • Две последние процедуры связывают файловую переменную F с файлом File. Name • Rec. Size – необязательный параметр, задаёт размер элемента файла в байтах • Если файл до этого был открыт, то он закроется и откроется заново в заданном режиме
procedure Close. File (var F : File); Закрывает файл function Eof (var F : File) : boolean; Проверяет, является ли текущая позиция концом файла while (not EOF(F)) do begin … end;
procedure Read (F : File, V 1. . Vn); Считывает компоненты файла в соответствующие переменные procedure Write (F : File, V 1. . Vn); Записывает в файл компоненты из соответствующих переменных Var F : file of integer; value : integer; begin … read(F, value); write(F, value); end;
procedure Block. Read (F : File, var Buf; count : integer [; var Done : integer]); Считывает не более count компонентов в переменную buf из файла F. Необязательный параметр Done – реально прочитанное количество. procedure Block. Write ( - // - ); Записывает не более count компонентов в файл F из переменной buf. Необязательный параметр Done – реально записанное количество.
procedure Seek (var F : File; N : long. Int); Перемещает указатель файла F в позицию N function File. Pos (var F : File) : Long. Int; Возвращает текущее положение указателя в файле F function File. Size (var F : File) : integer; Возвращает размер файла в компонентах
const FILE_NAME = ‘source. txt’ • var • F : file of integer; value : integer; curr. Position : long. Int; begin Assign. File (F, FILE_NAME); if file. Exists (FILE_NAME) then begin Reset (F) while not EOF(F) do begin curr. Position : = file. Pos (F); read (F, value); seek (F, curr. Position) value = value * (-1); write (F, value); end; Close. File (F); end; В файле хранятся 4 -байтовые числа. Программа меняет знак каждого на противоположный и перезаписывает число в файл
Text Текстовый файл
File of <Тип> Text • Файл считается последовательностью символов, интерпретируемых как текст • Не эквивалентно file of char (также, как string не эквивалентно array of char)
Доступно: • Assign. File • Reset (запись невозможна, только чтение) • Rewrite (только запись) Появляется: procedure Append (var F : Text); • Открывает существующий файл для добавления • Помещает указатель на конец файла
• Read (Reset only) • Write (Rewrite only) • Eof – то же самое, что и в бинарном • Eoln ([var F : Text]) – определяет, является ли концом строки • Flush() – записывает данные, которые остаются в буфере в файл
Var Input : Text; Output : Text; Файлы объявлены в стандартной библиотеке и связаны непосредственно с консолью