Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 40038.doc
Скачиваний:
7
Добавлен:
30.04.2022
Размер:
229.89 Кб
Скачать

Функции Win32 api получения информации о файлах и дисках

Все функции Win32 API, используемые в файловой системе, условно можно разделить на функции получения информации (информационные) и управляющие функции. Информационные функции имеют важное значение особенно в тех случаях, когда параметры алгоритма, выполняемого программой, зависимы от конфигурации системы. Список наиболее популярных и часто применяемых в файловой системе информационных функций представлен ниже.

Функции получения информации о диске:

  • GetLogicalDrives;

  • GetLogicalDriveStrings;

  • GetDriveType;

  • GetVolumeInformation;

  • GetDiskFreeSpace.

Функция GetLogicalDrives не имеет входных параметров и возвращает 32-битовое число, каждый бит которого, установленный в единицу, свидетельствует о наличии в системе соответствующего диска (0-й бит - диск А, 1-й бит - диск B и т.д.).

Синтаксис: DWORD GetLogicalDrives(void)

Функция GetLogicalDriveStrings в отличие от GetLogicalDrives позволяет получить массив символьных строк, представляющих собой имена дисков. Каждая строка заканчивается символом <null> так же, как и весь массив строк. Например: "a:\\<null>", "c:\\<null>", "d:\\<null>"<null>. Функция возвращает размер буфера, необходимый для хранения строк с именами дисков.

Синтаксис: DWORD GetLogicalDriveStrings(dwBuffer, lpBuffer) 

DWORD dwBuffer; // размер буфера для текстовой строки

LPTSTR lpBuffer; // указатель на буфер

Функция GetDriveType предназначена для определения типа диска. Возвращается одно из следующих значений типа unsigned int:

0 - Диск не может быть определен.

1 - Корневая директория не существует.

DRIVE_REMOVABLE - Гибкий диск.

DRIVE_FIXED - Жесткий диск.

DRIVE_REMOTE - Удаленный (сетевой) диск.

DRIVE_CDROM -   Компакт-диск (CD-ROM). 

DRIVE_RAMDISK - - Виртуальный диск.

Синтаксис: UINT GetDriveType(lpDiskName)

LPCTSTR lpDiskName; // указатель на имя диска

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

Синтаксис: BOOL GetVolumeInformation(lpDiskName, lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize)

LPCTSTR lpDiskName;// указатель на имя диска

LPTSTR lpVolumeNameBuffer;// указатель на метку диска

DWORD nVolumeNameSize;// размер буфера для метки диска

LPDWORD lpVolumeSerialNumber;// указатель на серийный номер диска

LPDWORD lpMaximumComponentLength;//указатель на максимальную длину имени файла(вместе с путем)

LPDWORD lpFileSystemFlags;// указатель на флаги системы

LPTSTR lpFileSystemNameBuffer;// указатель на название системы

DWORD nFileSystemNameSize;//размер буфера для названия системы

GetDiskFreeSpace предназначена для получения информации об объеме диска и количестве хранимой информации. Необходимо задать лишь имя диска и при успешном исполнении функция выдает значение true.

Cинтаксис: BOOL GetDiskFreeSpace(lpDiskName, lpSectorsPerCluster, lpBytesPerSector, lpFreeClusters, lpClusters)

LPCTSTR lpDiskName;// указатель на имя диска

LPDWORD lpSectorsPerCluster;// указатель на количество секторов в кластере

LPDWORD lpBytesPerSector;// указатель на количество байт в секторе

LPDWORD lpFreeClusters;// указатель на количество свободных кластеров

LPDWORD lpClusters;// указатель на количество кластеров