12.5.4. Переименование файлов

We use cookies. Read the Privacy and Cookie Policy

Процедура Rename( VAR f; NewName : String ) позволяет переименовать физический файл на диске, связанный с логическим файлом f. Процедура выполнима только с закрытым файлом, в противном случае возникнет сбой.

Предполагается, что файловая переменная f была предварительно связана вызовом процедуры Assign с неким физическим файлом, например FileName. Вызов Rename ( f, NewName ) сменит имя физического файла с FileName на NewName. В принципе, процедура Rename выполняет ту же работу, что и команда REN в MS-DOS. Правда, в отличие от последней Rename не может содержать в строковом параметре символы '*' и '?'.

Рассмотрим фрагмент программы (рис. 12.1).

| 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' ); { Готово! }

Рис. 12.1

Переименование происходит при закрытом файле f. После него можно снова открывать файл, но f будет связана уже с новым именем. Старый файл не резервируется (его имя 'A:REAL.DAT' замещено на 'A:FLOAT.DAT').

Будет ошибкой так переименовывать имя, что изменится имя диска и путь к файлу. Например, заведомо ошибочен второй оператор:

- 229 -

Assign( f, 'A:FILE.AAA');

Rename( f, 'C:FILE.BBB');

поскольку, кроме имени файла, изменяется содержащий его диск. Ведь таким образом мы задаем перенос файла с А: на С:, а лишь затем его переименование. Перенос же, как и копирование, не определен в языке, и его надо конструировать средствами Турбо Паскаля или использовать внешний вызов командного процессора MS-DOS (см. процедуру Exec модуля DOS).