Получение и изменение атрибутов файла
Функция FileTimeToDosDateTime в качестве входного параметра принимает указатель *lpFileTime на экземпляр структуры FILETIME. Этот указатель содержит представление времени в виде 64-битного значения. На выходе данная функция формирует два значения в переменных размером в слово, адреса которых указаны параметрами lpFatDate и lpFatTime. Формат этих слов совпадает с форматом соответствующих параметров, которыми манипулирует функция 71a7h.
Функция DosDateTimeToFileTime, наоборот, преобразует время в формате DOS представленное в виде двух слов wFatDate, wFatTime (для времени и даты соответственно), в 64-битное значение ipFiIeTime.
Установить время создания, последнего доступа или модификации файлов можно с помощью функции SetFileTime.
BOOL SetFileTime(HANDLE hFile .const FILETIME *lpCreationTime. const FILETIME *lpLastAccessTime, const FILETIME *lpLastWriteTime):
В качестве входных параметров функция SetFileTime принимает указатели на три экземпляра структуры FILETIME и дескриптор файла. Экземпляры структур уже заполнены необходимыми значениями времени. Если какое-либо из значений устанавливать не нужно, то вместо указателя на соответствующую структуру передается NULL. В случае успешного завершения функция возвращает ненулевое значение в регистре ЕАХ.
Из вышеизложенного видно, что для получения различных характеристик файла используются множество различных функций. Работа с ними может утомить кого угодно. Нельзя ли чего-нибудь попроще? Можно. Win32 предоставляет функцию GetFiIelnformationByHandle:
BOOL GetFileInformationByHandle(HANDLE hFile. LPBY_HANDLE_FILE_INFORMATION lpFilelnformation);
На вход данной функции передается дескриптор файла, о котором необходимо получить Информацию, и указатель на экземпляр структуры BYHANDLEFI LE_ INFORMATION, который заполняется этой функцией. Как видно из названия полей (см. код ниже), в этой структуре сосредоточена вся информация о файле. Ниже приведен пример кода, использующего данную структуру.
;prg07_32.asm – Win32-программа консольного приложения для ;Win32 для исследования работы функции GetFilelnformationByHandle API Win32. ;описание структур FILETIME struc DwLowDateTime dd? ;младшие 32 бита значения времени DwHighDateTime dd? ;старшие 32 бита значения времени FILETIME ends BY_HANDLE_FILE_INFORMATION struc DwFileAttributes dd 0 атрибуты файла struc FtCreationTime_DwLowDateTime dd? ;младшие 32 бита ;значения времени создания файла FtCreationTime_ DwHighDateTiirie dd? ;старшие 32 бита значения времени создания файла ends struc FtLastAccessTime_DwLowDateTime dd? ;младшие 32 бита значения времени посл. ;доступа FtLastAccessTime_DwHighDateTime dd? ;старшие 32 бита значения времени посл. доступа ends struc ^¦LastWriteTime_DwLowOateTime dd? ;младшие 32 бита значения времени поел, записи ^¦LastWnteTimeJDwHighDateTime dd? ;старшие 32 бита значения времени поел, записи ends ..".-rialNumber dd С ;серийный номер тома, на котором находится файл | nfTleSizeHigh d d 0:старшие 32 бита размера файла ¦nFiieSizeLow dd 0 :младшие 32 бита размера файла I nNumberOftinks dd 0; ;число ссылок на файл | nFilelndexHigh dd 0 ;старшие 32 бита идентификатора файла nFilelndexLow dd 0 ; младшие 32 бита идентификатора файла ends.data t info BY_HANDLE_FILE_INFORMATION <> TitleText db 'Получение информации о файле в Win32',О lpBuf db "p",0 I hFile dd 0.code ¦-------------------------------------CreateFile ;Открываем файл push О push 0 – . атрибуты (они игнорируются) push OPEN_EXISTING:открыть существующий файл, если его нет – ошибка push 0: защита файла не требуется push FILE_SHARE_READ разрешено совместное использование файла (по чтению) push GENERIC_READ разрешено чтение из файла push offset lpBuf call CreateFileA emp eax.Offffffffh je exit:если неуспех mov hFile.eax:дескриптор файла № GetFilelnformationByHandle push offset info push hFile call GetFilelnformationByHandle emp eax.O jz exit:выход в случае неудачи ¦"^ ;результат смотрим в отладчике TD32.exe
Результат работы данной программы можно посмотреть и проанализировать в отладчике.