Глава 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 Спрятанные и защищенные от записи файлы.-~>

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