Справочник программиста на персональном компьютере фирмы IBM. Дисковые накопители
Страница 12. Получение/установка времени  и даты последнего доступа к файлу


     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 содержит час доступа

 
« Предыдущая статья   Следующая статья »