Вспомогательные файлы

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск

Общая схема использования вспомогательных файлов

  1. Исходный файл открывается на чтение (Reset), одновременно создаётся (Rewrite) временный файл с некоторым специальным именем (см. следующий раздел).
  2. Временный файл заполняется необходимым содержимым, полученным из исходного файла (Read из исходного, Write во временный).
  3. Оба файла закрываются.
  4. Исходный файл удаляется (процедура Erase с одним параметром — файловой переменной).
  5. Временный файл переименовывается, ему даётся имя исходного (процедура Rename с двумя параметрами — файловая переменная и новое имя файла).

Генерация имени временного файла

Часто удобно давать временному файлу имя следующего вида:

<имя исходного файла><суффикс><расширение исходного файла>

В качестве суффикса можно использовать, например, «_temp» (от слова temporary — временный).

Ниже рассмотрено, как сконструировать такое имя.

Для того, чтобы получить имя файла без расширения, а также отдельно его расширение, можно воспользоваться статическими методами GetFileNameWithoutExtension и GetExtension класса System.IO.Path.
Например, результат работы этих методов для файла words.txt текущего каталога таков:

System.IO.Path.GetFileNameWithoutExtension('words.txt') >>> 'words'
System.IO.Path.GetExtension('words.txt') >>> '.txt'

Статический метод System.IO.Path.GetDirectoryName возвращает путь к файлу, а метод System.IO.Path.Combine позволяет формировать имя файла с путём к нему из отдельных частей (например, относительного пути и собственно имени файла).

Указание. Для генерации имени временного файла добавьте вспомогательную функцию MakeTempFileName и поместите её в раздел реализации модуля (поскольку она не предполагается для использования внешними программами). Исправьте функцию, представленную ниже, таким образом, чтобы она возвращала имя файла с путём следующей структуры:

<путь к файлу pathFileName><имя файла pathFileName><suffix><расширение файла pathFileName>

Подсказка. Ниже представлена заготовка для функции генерации имени временного файла: значение newFileName нужно инициализировать, используя методы GetFileNameWithoutExtension и GetExtension класса System.IO.Path.

function MakeTempFileName(pathFileName: string; suffix: string := '_temp'): string;
begin
  Assert(pathFileName &lt;&gt; '', 'pathFileName must not be empty');
  Assert(suffix &lt;&gt; '',       'suffix must not be empty');
  
  var newFileName := pathFileName;      // TODO
  
  Result := System.IO.Path.Combine(
    System.IO.Path.GetDirectoryName(pathFileName),  // path
    newFileName);
end;