Глава 5. Дисковые накопители.
Раздел 2. Работа с каталогами диска.
5.2.6 Спрятанные и защищенные от записи файлы.
DOS использует шесть различных атрибутов файлов, которые дают данному файлу определенный статус. Файл может иметь несколько из этих атрибутов одновременно (но не все). Атрибуты устанавливаются 12-м байтом 32-байтного элемента каталога. Младшие шесть битов имеют значение, а остальные должны быть равны нулю. Биты такие:
если бит 5 = 1, то файл был изменен со времени последней архивации 4 = 1, то файл является подкаталогом 3 = 1, то этот элемент является не файлом, а меткой тома 2 = 1, то файл является "системным" 1 = 1, то файл спрятан при поиске по каталогу 0 = 1, то файл объявлен только для чтенияБит 5 это архивный бит, используемый программами BACKUP и RESTORE DOS. Этот бит сьрасывается в 0 после архивации и устанавливается, когда с файлом снова работали. При следующей архивации неизмененные файлы могут быть обнаружены и проигнорированы.
Средний уровень.
Функция 43H прерывания 21H может как находить, так и изменять атрибуты файла, но только если файл был открыт с помощью метода дескриптора файлов, а не с помощью метода управляющего блока файла. Hет аналогичной функции для FCB. Байт атрибутов может быть установлен при создании файла {5.3.2}, используя расширенный управляющий блок файла. Hо если Вы последовательно откроете FCB, измените установку атрибутов и затем закроете файл, то у него останутся первоначальные атрибуты. Хотя, конечно, Вы можете изменить атрибуты каким-нибудь обходным путем, но намного проще использовать функцию, использующую метод дескриптора файлов.
Чтобы использовать функцию 43H, поместите 1 в AL, чтобы присвоить файлу байт атрибутов, содержащийся в CX (на самом деле в CL, поскольку CH равен 0). Можно наоборот поместить в AL 0, чтобы в CX был возвращен текущий байт атрибутов файла. В обоих случаях DS:DX должны указывать на строку, дающую путь к файлу. Kонец строки отмечается байтом ASCII 0 (который не входит в число 63-х символов). В примере статус "hidden" (спрятанный) присваивается файлу OVERDUE:
;---в сегменте данных | |
PATH DB 'A:ACCOUNTS',0 | |
;---включаем признак спрятанного файла | |
MOV AH,43H | ;номер функции |
MOV AL,0 | ;читаем байт атрибутов |
LEA DX,PATH | ;DS:DX указывают на путь |
INT 21H | ;байт атрибутов в CX |
JC ERROR_ROUTINE | ;обработка ошибок |
OR CL,10B | ;включаем бит 1 |
MOV AH,43H | ;номер функции |
MOV AL,1 | ;заменяем байт атрибутов |
INT 21H | ;теперь файл стал спрятанным |
<~-5.2.5 Получение/установка времени и даты последнего доступа к файлу.
Содержание
5.2.7 Чтение/изменение метки тома.-~>