Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители - Получение/установка времени и даты последнего доступа к файлу
ОГЛАВЛЕНИЕ
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-байтных значений расположен раньше в памяти, чем старший.
Средний уровень.
Метод доступа к файлу с использованием управляющего блока
файла позволяет получить дату последнего доступа к файлу, но не
время. Когда FCB открывается функцией 0FH прерывания 21H, то
заполняется двухбайтное поле даты в вышеприведенном формате. Это
поле расположено в FCB со смещением 14H [5.3.5].
С другой стороны, доступ к файлу с помощью дескриптора файла
позволяет как получить, так и установить дату и время последнего
доступа к файлу. Функция 57H прерывания 21H выполняет все опера-
ции. Для установки времени и даты поместите номер файла в BX, и 0
в AL. Для получения даты и времени надо поместить в AL 1. В обоих
случаях дата содержится в DX, а время в CX. Значение битов совпа-
дает с тем, что описано в таблице. В техническом руководстве по
MS DOS утверждается, что младшие байты информации находятся в CH
и DH, и наоборот. На самом деле это не так. При возникновении
ошибки устанавливается флаг переноса, а в 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 содержит час доступа