Процедуры и функции для работы с файлами
Ниже описываются процедуры и функции, которые можно использовать с файлами любого вида. Специфика работы с типизированными, текстовыми и нетипизированными файлами рассматривается в следующих разделах.
Процедура Close
Закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой ASSIGN, сохраняется. Формат обращения:
CLOSE (<ф.п.>)
При создании нового или расширении старого файла процедура обеспечивает сохранение в файле всех новых записей и регистрацию файла в каталоге. Функции процедуры CLOSE выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Поскольку связь файла с файловой переменной сохраняется, файл можно повторно открыть без дополнительного использования процедуры ASSIGN.
Процедура RENAME
Переименовывает файл. Формат обращения:
RENAME (<ф.п.>, <новое имя>)
Здесь <новое имя> – строковое выражение, содержащее новое имя файла. Перед выполнением процедуры необходимо закрыть файл, если он ранее был открыт процедурами RESET, REWRITE или APPEND.
Процедура ERASE
Уничтожает-файл. Формат обращения:
ERASE (<ф.п.>)
Перед выполнением процедуры необходимо закрыть файл, если он ранее был открыт процедурами RESET, REWRITE или APPEND.
Следующий фрагмент программы показывает, как можно использовать процедуры RENAME и CLOSE при работе с файлами. Предположим, что требуется отредактировать файл, имя которого содержит переменная NAME. Перед редактированием необходимо убедиться, что нужный файл имеется на диске, и переименовать его – заменить расширение этого файла на ВАК (страховочная копия). Если файл с таким расширением уже существует, его надо стереть.
var fi: text; {Исходный файл} fo: text; {Отредактированный файл} name: String; name_bak: String; k, i: Word; const bak = '.bak'; begin ……. {Получаем в name bak имя файла с расширением.ВАК:} k: = pos('.',name); if k = 0 then k: = length(name) +1; name_bak: = copy(name,1,k-1) + bak; {Проверяем существование исходного файла:} assign(fi,name); {$I-} ' reset(fi); if lOResult <> 0 then HALT; {Завершаем программу: файла не существует} close(fi);, {Проверяем существование.ВАК-файла:} assign(fо,name_bak); reset (fo); {$I+} if lOResult = 0 then begin {Файл.ВАК существует:} close(fo); {Закрываем его} erase(fo) {и уничтожаем} end; {Проверки закончены, подготовка к работе:} rename(f i,name_bak); reset(fi); assign(fo,name); rewrite(fo); ……. end.
Обратите внимание: проверка на существование файла .ВАК в данном примере необходима, так как обращение:
rename(fi,name_bak);
Вызовет ошибку в случае, если такой файл существует.