Иллюстрированный самоучитель по задачам и примерам Assembler

Получение и изменение атрибутов файла

Аналогично группе функций MS DOS для работы с файловой системой файловая подсистема Win32 содержит ряд функций, с помощью которых можно определить характеристики конкретного файла.

Начальные значения атрибутов файла назначаются при создании файла. Впоследствии их можно изменить вызовом функции SetFiIeAttributes.

BOOL SetFileAttributestLPCTSTR ipFileName. DWORD dwFi1eAttributes);

Параметры этой функции означают следующее:

  • ipFileName – указатель на ASCIIZ-строку, содержащую имя файла;
  • dwFileAttributes – двойное слово, определяющее, какие атрибуты файла могут быть установлены.

Планируя использование этой функции, необходимо иметь в виду, что не все возможные атрибуты файлов могут быть установлены с ее помощью. Перечислим те атрибуты, комбинацию которых можно задавать для изменения атрибутов файла, специфицированного параметром lpFileName:

FILE_ATTRIBUTE_ARCHIVE, FILE_ATTRIBUTE_HIDDEN, FILE_ATTRIBUTENORMAL,
FILE_ATTRIBUTE_READONLY, FILE_ATTRIBUTE_
SYSTEM, FILEATTRIBUTETEMPORARY.

При удачном завершении функция SetFileAttributes возвращает ненулевое значение в регистре ЕАХ. В случае неудачи функция возвращает в регистре ЕАХ значение NULL.

Для получения атрибутов файла используется функция GetFileAttributes.

DWORD GetFileAttributes(LPCTSTR lpFileName):

Функция имеет один параметр lpFileName, который является указателем на ASCIIZ-строку, содержащую имя файла.

При удачном завершении функция GetFileAttributes возвращает значение в регистре ЕАХ, которое является комбинацией атрибутов файла, специфицированного параметром lpFileName. Выделить эти атрибуты можно, используя логические команды ассемблера или команды обработки битов. В случае неудачи функция возвращает в регистре ЕАХ значение NULL.

В приложениях очень часто требуется определить размер файла. Для этого Win32 содержит отдельную функцию:

GetFileSize. DWORD GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh):

Параметры функции означают следующее:

  • hFile – дескриптор файла, размер которого требуется определить;
  • lpFileSizeHigh – адрес области памяти, куда помещаются старшие 32 бита значения размера файла, младшие 32 бита возвращаются функцией в регистре ЕАХ.

При удачном завершении функция GetFileSize возвращает значение младших 32 бит размера файла в регистре ЕАХ. В случае неудачи функция возвращает в регистре ЕАХ значение Offffffffh.

Особого разговора заслуживают возможности получения информации о временных характеристиках файлов. По сравнению с аналогичными средствами MS DOS в Win32 этот вопрос проработан значительно глубже. Хотя если посмотреть номенклатуру и описание функций MS DOS для работы с длинными именами файлов, то видно, что у них уже есть общие идеи, реализованные рассматриваемыми ниже функциями Win32.

Как уже отмечалось выше, в Win32 с файлом связаны три значения времени: время создания, время последнего доступа и время последней модификации. Получить эти значения можно с помощью функции GetFileTime.

BOOL GetFileTime(HANDLE hFile, LPFILETIME ipCreationTime. LPFILETIME ipLastAccessTime,
LPFILETIME ipLastWhteTime);

Перед вызовом данной функции, необходимо открыть файл, о значениях времени которого мы хотим получить информацию. Функции GetFileTime передается дескриптор этого файла и указатели на три экземпляра структуры FILETIME, в которые будут записаны время создания (IpCreationTime), время последнего доступа (lpLastAccessTime) и время последней записи (lpLastWriteTime).

Аналогично функции MS DOS 71a7h Win32 предоставляет две функции для взаимного преобразования DOS-времени файла в 64-битное представление времени:

BOOL FileTimeToDosDateTime(CONST FILETIME *lpFileTime, LPWORD lpFatDate.
LPWORD ipFatTime): BOOL DosDateTimeToFileTimetWORD wFatDate.
WORD wFatTime. LPFILETIME ipFiieTime);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.