Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 7 стр.

UptoLike

13
программы. Процедура не изменяет связь между файловой переменной f и
физическим файлом, но назначает им текущее состояниезакрыт ”. Это осо-
бенно важно для файлов открытых для записи. Закрытие файла гарантирует
сохранность и полноту заполнения. Так, фатальная ошибка в программе уже
не сможет повлиять на содержимое файла после его закрытия.
Если программа прервалась изза ошибки до закрытия файла, то он
все же будет создан на носителе, но содержимое последнего буфера не будет
перенесено в файл. То же самое может случиться и в том случае, если вообще
забыть поставить в программу вызовы Close.
Вызовы процедуры Close необходимы при завершении работы с фай-
лами. Также необходимо закрывать открытые файлы перед их удалением
(Erase) или переименованием (Rename).
Переименование файлов
Процедура Rename (Var f; NewName : String) позволяет переимено-
вать физический файл на диске, связанный с логическим файлом f. Проце-
дура выполнима только с закрытым файлом, в противном случае возникнет
сбой.
Предполагается, что файловая переменная f была предварительно свя-
зана вызовом процедуры Assign с неким физическим файлом, например,
FileName. Вызов Rename (f, NewName) сменит имя физического файла с
FileName на NewName. В процедуре Rename не могут содержаться символы
шаблона * и ? в строковом параметре.
Рассмотрим фрагмент программы:
var
f : File of Real;
begin
Assign (f, A:\REAL.DAT); {установлена связь}
Rewrite (f); {открытие файла для записи}
Write (f, …); {запись в файл f}
Close (f); {обязательно закрытие файла}
{Пусть теперь надо сменить имя файла REAL на FLOAT}
Rename (f, A:\FLOAT.DAT); {Готово!}
Переименование происходит при закрытом файле f. После него можно
снова открывать файл, но f будет связана уже с новым именем. Старый файл
не резервируется (его имя ‘A:\REAL.DAT’замещено на ‘A:\FLOAT.DAT’).
Будет ошибкой так переименовывать имя, что изменится имя диска и
путь к файлу. Например, заведомо ошибочен второй оператор:
14
Assign (f, A:\FILE.AAA)
Rename (f, C:\FILE.BBB)
поскольку, кроме имени файла, изменяется содержащий его диск. Ведь таким
образом мы задаем перенос файла с А: на С:, а лишь затем его переименова-
ние. Перенос же, как и копирование, не определен в языке, и его надо
конструировать средствами Турбо Паскаля или использовать внешний вызов
командного процессора MS – DOS.
Удаление файлов
Процедура Erase (Var f) уничтожает (стирает) физический файл на но-
сителе (диске). Файловая переменная f должна быть предварительно связана
с существующим физическим файлом. Сам файл к моменту вызова Erase
должен быть закрыт.
Чтобы уничтожить файл с именем FileName, достаточно конструкции:
Assign (f, FileName); Erase(f);
где f-файловая переменная любого типа.
Если файл с именем FileName не существует, возникнет сбой при по-
пытке уничтожить его.
Логическая функция проверки на обнаружение конца файла
Логическая функция EOF (Var f): Boolean возвращает значение TRUE,
когда при чтении достигнут конец файла f. Это означает, что уже прочитан
последний элемент в файле или файл f после открытия оказался пуст. Во всех
остальных случаях функция возвращает значение False. Состояние EOF об-
новляется автоматически при каждом обращении к процедуре ввода данных.
Файл f должен быть открыт.
Обращение к EOF без указания файла соответствует анализу конца
стандартного файла Input (как правило, связанного с клавиатурой). Стандарт-
ный файл считается текстовым, и конец файла в нем обозначен символом #26
(в прочих, нетекстовых файлах, явного обозначения конца файла не сущест-
вует).
Назначение функции EOF - указывать на возникновение конца файла.
Функция EOF используется в цикле while, читающем файл до конца:
while not EOF do {пока не достигнут конец файла f,}
Read (f, ...); {читать данные из этого файла}
end.
Эта конструкция гарантирует, что чтение прекратится только после
считывания последнего элемента в файле с логическим именем f. Обратим
внимание, что используется цикл while do , а не repeat ...until. Функция EOF
программы. Процедура не изменяет связь между файловой переменной f и                                    Assign (f, ′A:\FILE.AAA′)
физическим файлом, но назначает им текущее состояние ”закрыт ”. Это осо-                               Rename (f, ′C:\FILE.BBB′)
бенно важно для файлов открытых для записи. Закрытие файла гарантирует       поскольку, кроме имени файла, изменяется содержащий его диск. Ведь таким
сохранность и полноту заполнения. Так, фатальная ошибка в программе уже      образом мы задаем перенос файла с А: на С:, а лишь затем его переименова-
не сможет повлиять на содержимое файла после его закрытия.                   ние. Перенос же, как и копирование, не определен в языке, и его надо
       Если программа прервалась из – за ошибки до закрытия файла, то он     конструировать средствами Турбо Паскаля или использовать внешний вызов
все же будет создан на носителе, но содержимое последнего буфера не будет    командного процессора MS – DOS.
перенесено в файл. То же самое может случиться и в том случае, если вообще                                   Удаление файлов
забыть поставить в программу вызовы Close.                                          Процедура Erase (Var f) уничтожает (стирает) физический файл на но-
       Вызовы процедуры Close необходимы при завершении работы с фай-        сителе (диске). Файловая переменная f должна быть предварительно связана
лами. Также необходимо закрывать открытые файлы перед их удалением           с существующим физическим файлом. Сам файл к моменту вызова Erase
(Erase) или переименованием (Rename).                                        должен быть закрыт.
                              Переименование файлов                                 Чтобы уничтожить файл с именем FileName, достаточно конструкции:
      Процедура Rename (Var f; NewName : String) позволяет   переимено-                                Assign (f, FileName); Erase(f);
вать физический файл на диске, связанный с логическим файлом f. Проце-       где f-файловая переменная любого типа.
дура выполнима только с закрытым файлом, в противном случае возникнет               Если файл с именем FileName не существует, возникнет сбой при по-
сбой.                                                                        пытке уничтожить его.
      Предполагается, что файловая переменная f была предварительно свя-               Логическая функция проверки на обнаружение конца файла
зана вызовом процедуры Assign с неким физическим файлом, например,                  Логическая функция EOF (Var f): Boolean возвращает значение TRUE,
FileName. Вызов Rename (f, NewName) сменит имя физического файла с           когда при чтении достигнут конец файла f. Это означает, что уже прочитан
FileName на NewName. В процедуре Rename не могут содержаться символы         последний элемент в файле или файл f после открытия оказался пуст. Во всех
шаблона ′*′ и ′?′ в строковом параметре.                                     остальных случаях функция возвращает значение False. Состояние EOF об-
      Рассмотрим фрагмент программы:                                         новляется автоматически при каждом обращении к процедуре ввода данных.
      var                                                                    Файл f должен быть открыт.
      f : File of Real;                                                             Обращение к EOF без указания файла соответствует анализу конца
      begin                                                                  стандартного файла Input (как правило, связанного с клавиатурой). Стандарт-
         Assign (f, ′A:\REAL.DAT′);   {установлена связь}                    ный файл считается текстовым, и конец файла в нем обозначен символом #26
         Rewrite (f);                 {открытие файла для записи}            (в прочих, нетекстовых файлах, явного обозначения конца файла не сущест-
         Write (f, );                 {запись в файл f}
                                                                             вует).
         Close (f);                   {обязательно закрытие файла}
      {Пусть теперь надо сменить имя файла ′REAL′ на ′FLOAT′}                       Назначение функции EOF - указывать на возникновение конца файла.
                                                                             Функция EOF используется в цикле while, читающем файл до конца:
      Rename (f, ′A:\FLOAT.DAT′);                     {Готово!}
                                                                                    while not EOF do         {пока не достигнут конец файла f,}
       Переименование происходит при закрытом файле f. После него можно             Read (f, ...);           {читать данные из этого файла}
снова открывать файл, но f будет связана уже с новым именем. Старый файл            end.
не резервируется (его имя ‘A:\REAL.DAT’замещено на ‘A:\FLOAT.DAT’).                 Эта конструкция гарантирует, что чтение прекратится только после
       Будет ошибкой так переименовывать имя, что изменится имя диска и      считывания последнего элемента в файле с логическим именем f. Обратим
путь к файлу. Например, заведомо ошибочен второй оператор:                   внимание, что используется цикл while do , а не repeat ...until. Функция EOF
                                    13                                                                           14