Вспомогательные файлы
Общая схема использования вспомогательных файлов
- Исходный файл открывается на чтение (
Reset
), одновременно создаётся (Rewrite
) временный файл с некоторым специальным именем (см. следующий раздел). - Временный файл заполняется необходимым содержимым, полученным из исходного файла (
Read
из исходного,Write
во временный). - Оба файла закрываются.
- Исходный файл удаляется (процедура
Erase
с одним параметром — файловой переменной). - Временный файл переименовывается, ему даётся имя исходного (процедура
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 <> '', 'pathFileName must not be empty');
Assert(suffix <> '', 'suffix must not be empty');
var newFileName := pathFileName; // TODO
Result := System.IO.Path.Combine(
System.IO.Path.GetDirectoryName(pathFileName), // path
newFileName);
end;