Определение параметров логического устройства
Одним из наиболее интересных параметров логического устройства является размер свободного пространства на нем. Этот параметр вместе с некоторыми другими вы можете определить при помощи функции GetDiskFreeSpace:
BOOL GetDiskFreeSpace(
LPCTSTR lpRootPathName, // адрес пути к корневому каталогу
LPDWORD lpSectorsPerCluster,// количество секторов в кластере
LPDWORD lpBytesPerSector, // количество байт в секторе
LPDWORD lpNumberOfFreeClusters, // количество свободных
// кластеров
LPDWORD lpTotalNumberOfClusters); // общее количество
// кластеров
Перед вызовом этой функции вы должны подготовить несколько переменных типа DWORD и передать функции их адреса. Функция GetDiskFreeSpace запишет в эти переменные параметры логического диска, перечисленные в комментариях к прототипу функции.
Для того чтобы определить размер свободного пространства на диске в байтах, вы должны умножить значение количества свободных кластеров (записанное по адресу lpNumberOfFreeClusters) на количество секторов в кластере (записанное по адресу lpSectorsPerCluster) и на количество байт в одном секторе (которое будет записано по адресу lpBytesPerSector). Более подробно о делении диска на кластеры и секторы вы можете узнать из 19 тома “Библиотеки системного программиста”.
В программном интерфейсе Microsoft Windows NT есть еще одна функция, с помощью которой вы можете определить параметры дискового устройства. Это функция GetVolumeInformation:
BOOL GetVolumeInformation(
LPCTSTR lpRootPathName, // адрес пути к корневому каталогу
LPTSTR lpVolumeNameBuffer, // буфер для имени тома
DWORD nVolumeNameSize, // размер буфера lpVolumeNameBuffer
LPDWORD lpVolumeSerialNumber, // буфер для серийного номера
// тома
LPDWORD lpMaximumComponentLength, // буфер для максимальной
// длины имени файла, допустимой для данного тома
LPDWORD lpFileSystemFlags, // буфер для системных флагов
LPTSTR lpFileSystemNameBuffer, // буфер для имени
// файловой системы
DWORD nFileSystemNameSize); // размер буфера
// lpFileSystemNameBuffer
Перед использованием этой функции вы должны подготовить несколько буферов и передать функции их адреса. Функция заполнит буферы параметрами устройства, корневой каталог которого задан параметром lpRootPathName.
В буфере системных флагов, адрес которого передается функции через параметр lpFileSystemFlags, могут быть установлены следующие флаги:
Флаг |
Описание |
FS_CASE_IS_PRESERVED |
Система делает различия между заглавными и прописными буквами в именах файлов при записи этих имен на диск |
FS_CASE_SENSITIVE |
Система делает различия между заглавными и прописными буквами |
FS_UNICODE_STORED_ON_DISK |
Система может работать с кодировкой Unicode в именах файлов |
FS_PERSISTENT_ACLS |
Система способна работать со списком контроля доступа к файлам ACL (access-control list). Такая возможность есть в файловой системе NTFS, но отсутствует в файловых системах HPFS и FAT |
FS_FILE_COMPRESSION |
Файловая система способна сжимать (компрессовать) отдельные файлы |
FS_VOL_IS_COMPRESSED |
Для тома используется автоматическая компрессия данных |