Каждому файлу в языке ставится в соответствие файловая переменная, которая должна быть связана с конкретным внешним файлом. Поэтому перед началом работы с файлом необходимо установить данное соответствие. Для этого в языке используется процедура:
Assign(Var F; Name:String);
где F - переменная любого файлового типа, а строковое выражение Name содержит полное имя файла, удовлетворяющее требованиям операционной системы.
Процедура Assign всегда предшествует другим процедурам работы с файлами, так как ставит в соответствие конкретному файлу на внешнем устройстве логическую файловую переменную языка, к которой впоследствии будут обращаться все другие файловые процедуры. Недопустимо использование процедуры Assign для уже открытого файла. Это значит, что если было назначено имя конкретного набора данных файловой переменной с помощью процедуры Assign, а затем этот файл был открыт, то, прежде чем использовать ту же файловую переменную для нового набора данных, необходимо с помощью процедуры Close закрыть этот файл.
|
|
Для работы с файлом прежде всего необходимо его открыть. В языке Паскаль предусмотрены для этого две процедуры:
Reset(var F: file); - открывает существующий файл;
Rewrite(var F: file); -создает и открывает новый файл.
При описании обеих процедур параметр file означает файловую переменную любого типа. Открытие внешнего файла с помощью процедуры Reset в случае его отсутствия на диске может привести к ошибке при выполнении программы.
Пример1. Стандартное открытие файла
Assign(F, ' ');
Reset(F);
Процедура Rewrite создает и открывает новый файл. Использование этой процедуры требует особого внимания. При попытке создать и открыть новый файл с именем уже существующего на диске набора данных действие процедуры Rewrite сведется к удалению этого набора и созданию нового пустого файла с тем же именем.
Если процедура Rewrite используется для текстового файла, то к открываемому новому набору данных в дальнейшем могут быть применимы только операции записи.
Операция закрытия файла является логическим окончанием работы с любым открытым файлом. Для этого служит процедура
Close (Var F);
Использование процедуры Close позволяет устранить связь файловой переменной с внешним файлом, установленную с помощью процедуры Assign.
Пример 2. Полная цепочка команд для создания простого текстового файла с именем WORK.TXT:
…
Var
F: text;
begin
Assign(F, ' WORK. ТХТ');
Rewrite(F);
Write(F, 'Простой текстовый файл');
Close(F);
end.
К языковым средствам обслуживания файлов необходимо отнести процедуры переименования и удаления неоткрытых файлов. Использование этих процедур не зависит от типа файла.
Rename(var F; NewName: string);
Процедура переименовывает неоткрытый файл F любого типа. Новое имя задается строкой NewName. ]
|
|
Erase(var F);
Процедура удаляет неоткрытый внешний файл любого типа, задаваемый переменной F.
Обе процедуры нельзя использовать для уже открытых файлов. Операции удаления и переименования осуществляются только для реально существующих файлов, иначе возникает ошибка выполнения программы.
Пример 3. Удаление или переименование файла
Var
F: file;
Ch: char;
St: string;
begin
Write('Введите имя файла: ');
Readln(St); {Чтение имени}
Assign(F, St); {Назначить имя файловой переменной}
Write('Удалить файл (У), Переименовать(П), Выход(В)');
Readln(Ch);
case Ch of
'У ', ' y': Erase(F); {Удаление файла}
'П','п': begin
Write('Введите новое имя файла: ');
Readln(St);
Rename(F, St); {Переименование файла}
end;
'В','в': Halt(1);
end;
end.
В приведенном примере альтернативный выбор тех или иных действий зависит целиком от того, что будет введено с клавиатуры. Этот вариант программы не позволяет обработать ошибочные ситуации в случае, если файла с именем St не существует на диске.
Для того чтобы файловые операции выполнялись без ошибок, необходимо использовать специальную функцию IOresult. Функция работает без параметров и возвращает значение типа integer, представляющее статус последней выполненной операции ввода-вывода. Использование этой функции в программах возможно лишь в том случае, если на время выполнения файловых операций отключена стандартная проверка операций ввода-вывода. Для этих целей используется либо специальная опция в интегрированной системе, либо директива компилятора {$I}, которая может задаваться внутри текста программы.
Пример 4. Вариант программы для проверки существования файла на диске
Var
F: file;
St: string;
begin
Write('Введите имя файла: ');
Readln(St);
Assign(F, St);
{$I-} {Отключить стандартную обработку ошибок}
Reset(F); {Открыть файл}
{$I+} {Включить стандартную обработку ошибок}
if IOresult = 0 then
begin
Writeln('Файл существует и нормально открыт');
Close(F); {Закрыть файл}
end
else
Writeln('Файла с именем '+St+' на диске нет');
end.
После корректного выполнения операции ввода-вывода функция IOresult возвращает значение, равное нулю, в остальных случаях функция возвращает соответствующий код ошибки.
Рассмотренные операции ввода-вывода охватывают все типы файлов в Турбо Паскале и характеризуют взаимоотношения файловой и операционной систем.
Итак, для работы с любым типом файлов используются следующие процедуры и функции:
Процедуры и функции для работы с любыми файлами | Описание |
ASSIGN(F,Name) | Связь файловой переменной F с внешним файлом Name. Name-переменная или константа типа String,Char. Имя файла должно быть написано в соответствии с правилами DOS. F- переменная любого файлового типа. |
RESET(F[,SIZE]) | Открытие существующего файла. Открывается существующий файл, с которым связана файловая переменная F и указатель текущего компонента файла перемещается на начало файла. Необязательный параметр SIZE используется только в нетипизированных файлах и задает размер пересылаемого элемента информации в байтах. |
REWRITE(F[,SIZE]) | Открытие нового пустого файла. Открывается новый пустой файл, и ему присваивается имя, заданное процедурой ASSIGN. Если файл с таким именем уже существует, то он уничтожается. Необязательный параметр SIZE используется только в нетипизированных файлах и задает размер пересылаемого элемента информации в байтах. |
ERASE(F) | Уничтожение файла. Удаляет неоткрытый внешний файл, задаваемый переменной F. |
RENAME (F,NewName) | Переименование файла. Переименовывает неоткрытый внешний файл, задаваемый переменной F, новое имя задается строкой NewName. |
CLOSE(F) | Закрытие файла. |
EOF(F) | Конец файла. |