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

Работа с дисками, каталогами и организация поиска файлов

На вход функции GetVolumelnformation подаются следующие параметры:

  • IpRootPathName – указатель на строку с именем корневого каталога диска, информацию о котором необходимо получить (если параметр равен NULL, функция формирует информацию о текущем диске). Формат задания имени корневого каталога диска – имя_диска:\. Это единственный параметр, значение которого нужно задавать, остальные параметры – адреса областей памяти, в которые будут помещены значения, формируемые функцией;
  • lpVolumeNameBuffern и nVolumeNameSize – указатель на буфер и размер буфера, в который будет записано имя диска;
  • IpVolumeSerialNumber – адрес двойного слова, куда будет записан серийный номер. Если информация о серийном номере диска не нужна, то при вызове функции значение этого параметра необходимо сделать равным NULL;
  • lpMaximumComponentLength – адрес двойного слова, куда будет записано значение максимальной длины пути, возможное в данной файловой системе;
  • lpFileSystemFlags – флаги с дополнительной информацией о файловой системе:
    • FS_CASE_SENSITIVE=FILE_CASE_SENSITIVE_SEARCH=00000001h – поддержка со стороны файловой системы поиска с сохранением регистра букв;
    • FS_CASE_IS_PRESERVED=FILE_CASE_PRESERVED_NAMES=00000002h – при записи на диск сохранить регистр букв в имени файла;
    • FS_UNICODE_STORED_ON_DISK=FILE_UNICODE_ON_DISK=00000004h – файловая система поддерживает хранение имен файлов в Unicode;
    • FSPERSI STENT_ACLS=FI LEPERS I STENT_ACLS=00000008h – файловая система способна оперировать со списками контроля доступа (ACL) – только для NTFS;
    • FS_FILE_COMPRESSION=FILE_FILE_COMPR?SSION=00000010h – файловая система поддерживает сжатие файлов;
    • FS_VOL_IS_COMPRESSED=FILE_VOLUME_IS_COMPRESSED=00008000h – том, о котором запрашивается информация, был сжат;
  • lpFileSystemNameBuffer и nFileSystemNameSize – указатель и размер буфера в который будет записано имя файловой системы. Если TpFiieSystemName-Buffer=NULL, то в эти параметры ничего не записывается.

Изменить метку диска может вызов функции SetVolumeLabel.

BOOL SetVolumeLabel(LPCTSTR IpRootPathName. LPTSTR lpVolumeName):

Параметр IpRootPathName задает адрес строки с именем корневого каталога диска, метку которого меняем. Второй параметр ipVolumeNarae – строка с меткой тома. Для удаления метки тома с диска параметр lpVolumeName нужно задать равным NULL.

Получить информацию о свободном дисковом пространстве

Информацию о свободном дисковом пространстве, а заодно и о разбиении диска на сектора и кластеры позволяет получить функция GetDiskFreeSpace.

BOOL GetDiskFreeSpaceCLPCTSTR IpRootPathName.
LPDWORD ipSectorsPerCluster, LPDWORD lpBytesPerSector,
LPDWORD ipNumDerOfFreeClusters. " LPDWORD ipTotalNumberOfClusters):

На вход функции нужно подать строку с именем корневого каталога диска, о котором необходимо получить информацию (NULL для текущего диска), и адреса буферов, куда будет помещена следующая информация: общее количество кластеров на диске (ipTotalNumberOfClusters), общее количество свободных кластеров (TpNumberOfFreeCIusters), количество байт в секторе (lpBytesPerSector), количество секторов в кластере (IpSectorsPerCluster).

Создание и удаление каталога

Создание каталога выполняет функция CreateDirectory.

BOOL CreateDirectory (LPCTSTR lpPathName. LPSECURITYJVTTRIBUTES.IpSecurityAttributes):

Первый параметр этой функции lpPathName – указатель на ASCIIZ-строку с путем, последний элемент которого является именем нового каталога. Параметр ipSecurityAttributes – указатель на экземпляр структуры Security_Attributes.

SECURITY_ATTRIBUTES stoic
nLength dd. 0
lpSecurityDeschptor dd 0
blnheritHandle dd
ends

С помощью структуры SecurityAttributes можно ограничить доступ пользователя к каталогу. Параметр IpSecurityAttributes обычно задается равным NULL. Более подробную информацию о параметрах структуры можно получить в MSDN.

Удаление каталога выполняет функция RemoveDirectory.

BOOL RemoveDirectory(LPCTSTR lpPathName);

Единственный параметр этой функции ipPathName – указатель на ASCIIZ-строки с путем, последний элемент которого является именем удаляемого каталога. Удаляемый каталог не должен быть пустым.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.