Глава 5. Дисковые накопители.
Раздел 2. Работа с каталогами диска.
5.2.5 Получение/установка времени и даты последнего доступа к файлу.
Если отсчитывать от нуля, то байты 22-23 32-байтного элемента каталога содержат время последнего доступа к файлу. Байты 24-25 содержат дату. Значение битов следующее:
Время: биты 11-15 часы (0-23) 5-10 минуты (0-59) 0-4 секунды (0-29 с 2-секундным интервалом) Дата: биты 9-15 год (0-119, смещение с 1980 года) 5-8 месяц (1-12) 0-4 число (1-31)День недели не записывается; DOS вычисляет его по остальной информации. Отметим также, что как всегда, младший байт этих 2-байтных значений расположен раньше в памяти, чем старший.
Средний уровень.
Метод доступа к файлу с использованием управляющего блока файла позволяет получить дату последнего доступа к файлу, но не время. Kогда FCB открывается функцией 0FH прерывания 21H, то заполняется двухбайтное поле даты в вышеприведенном формате. Это поле расположено в FCB со смещением 14H {5.3.5}.
С другой стороны, доступ к файлу с помощью дескриптора файла позволяет как получить, так и установить дату и время последнего доступа к файлу. Функция 57H прерывания 21H выполняет все операции. Для установки времени и даты поместите номер файла в BX, и 0 в AL. Для получения даты и времени надо поместить в AL 1. В обоих случаях дата содержится в DX, а время в CX. Значение битов совпадает с тем, что описано в таблице. В техническом руководстве по MS DOS утверждается, что младшие байты информации находятся в CH и DH, и наоборот. Hа самом деле это не так. При возникновении ошибки устанавливается флаг переноса, а в AX возвращается 1, если в AL указано неправильное число и 6, если плохой дескриптор файла. В следующем примере определяется час, в который был последний лоступ к файлу:
;---в сегменте данных | |
PATH DB 'B:NEWDATA.BAK',0 | ;---открываем файл |
LEA DX,PATH | ;указываем на строку пути |
MOV AH,3DH | ;функция открытия файла |
MOV AL,0 | ;открываем для чтения |
INT 21H | ;открываем файл |
JC OPEN_ERROR | ;переход на обработку ошибки |
;---получаем дату и время доступа к файлу | |
MOV BX,AX | ;помещаем номер файла в BX |
MOV AL,0 | ;код для чтения времени |
MOV AH,57H | ;номер функции |
INT 21H | ;получаем время доступа |
JC TIME_ERROR | ;переход на обработку ошибок |
;---сдвигаем биты, относящиеся к часам, в начало CH | |
MOV CL,3 | ;готовим сдвиг |
SHR CH,CL | ;теперь CH содержит час доступа |
<~-5.2.4 Получение/установка текущего каталога.
Содержание
5.2.6 Спрятанные и защищенные от записи файлы.-~>