Глава 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 Подготовка к файловым операциям.-~>

Сайт управляется системой uCoz