12.5.4. Переименование файлов
Процедура 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).