Глава 5. Дисковые накопители.
Раздел 3. Подготовка к работе с файлами.
5.3.4 Переименование файла; изменение позиции файла в каталоге.
Переименование файла может заключаться лишь в изменении первых 11-ти символов элемента каталога. Однако в древовидном каталоге весь элемент каталога может быть перенесен в другой подкаталог, переопределяя тем самым путь к файлу. Одна команда может как переименовать файл, так и перенести его в другой каталог.
Средний уровень.
MS DOS может переименовывать файлы, используя как метод управляющего блока файла, так и метод дескриптора файла. Первый из них может применяться только к файлам, расположенным в текущем каталоге. Метод FCB:
Используйте функцию 17H прерывания 21H. DS:DX должны указывать на открытый управляющий блок файла. Поместите новое имя файла в FCB, начиная со смещения 11H (это "резервная" область блока). Hовое имя может использовать символ "?", в этом случае символы, находящиеся в этих позициях, не будут изменяться. При возврате, если новое имя уже существовало в каталоге, то AL будет равно FF, иначе AL = 0. В примере имя файла ACCOUNTS.DAT меняется на DEBTS.DAT.
;---в сегменте данных | |
FCB DB 'FILENAMEEXT',25 DUP(0) | |
NEWNAME DB 'NEWNAME EXT', | ;11 символов нового имени |
;---помещаем новое имя файла в переменную NEWNAME | |
MOV SI,OFFSET NEWNAME | ;DS:SI указывают на новое имя |
MOV AX,SEG FCB | ;ES:DI указывают на FCB |
MOV ES,AX | ; |
MOV DI,OFFSET FCB | ; |
ADD DI,11H | ;начинаем со смещения 11H |
MOV CX,11 | ;имя файла содержит 11 символов |
REP MOVSB | ;переносим 11 байтов |
LEA DX,FCB | ;DS:DX указывают на FCB |
MOV AH,17H | ;функция изменения имени |
INT 21H | ;изменяем имя |
CMP AL,0FFH | ;проверка на ошибку |
JE RENAME_ERROR | ;уход на обработку ошибки |
Функция 56H прерывания 21H переименовывает и перемещает файлы. DS:DX должны указывать на строку, дающую путь и имя переименуемого файла (до 63-х символов) и завершающуюся символом ASCII 0. ES:DI должны указывать на вторую строку, которая дает новые имя и путь файла. Имена накопителей, если они присутствуют, должны совпадать. Если пути различны, то файл переноносится в другой подкаталог. Чтобы перенести файл без переименования надо во второй строке указать то же самое имя, но другой путь. При возврате, если произошла ошибка, то устанавливается флаг переноса, а AX будет содержать 3 - если один из путей не найден, 5 - при ошибке на диске и 17 - при попытке переноса между разными накопителями. В примере файл ACCOUNTS.DAT переносится из подкаталога GAINS в подкаталог LOSSES.
;---в сегменте данных | |
OLDPATH DB 'A:GAINS\ACCOUNTS.DAT',0 | |
NEWPATH DB 'A:LOSSES\ACCOUNTS.DAT',0 | |
;---изменение пути файла | |
LEA DX,OLDPATH | ;DS:DX указывают на старый путь |
MOV AX,SEG NEWPATH | ;ES:DI указывают на новый путь |
MOV ES,AX | ; |
MOV DI,OFFSET NEWPATH | ; |
MOV AH,56H | ;номер функции |
INT 21H | ;переносим файл |
JC ERROR_ROUTINE | ;уход на обработку ошибки |
<~-5.3.3 Открытие/закрытие файла.
Содержание
5.3.5 Подготовка к файловым операциям.-~>