2016-04-26 2 views
0

Я хотел бы рассчитать свободное пространство всего жесткого диска с помощью C++ и WMI.Как получить свободное пространство для всех логических дисков жесткого диска с использованием WMI в C++?

Например. Если жесткий диск содержит 3 логических диска, скажем, C:, D:, E: и каждый логический диск имеет конфигурацию ниже.

диск Total Space Free Space

C: 10GB 5 GB D: 20GB 8 GB E: 15GB 7 GB

Так что нужно получить свободное пространство на жестком диске есть свободное место всех дисков C, D и E.

SO должно возвращать 5 + 8 + 7 = 20 ГБ.

Также я не знаю, что все логические диски существуют для этого жесткого диска.

ответ

0

Не WMI ay намного проще.

Вы можете использовать GetLogicalDriveStrings (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364975(v=vs.85).aspx), чтобы получить все диски в системе.

Дальнейшее использование GetDiskFreeSpace (https://msdn.microsoft.com/en-us/library/windows/desktop/aa364935(v=vs.85).aspx), чтобы найти свободное место на конкретном диске.

Если йо действительно хочет (должен) придерживаться WMI, страница https://msdn.microsoft.com/en-us/library/windows/desktop/aa393244(v=vs.85).aspx даст некоторые указания о том, как создать экземпляр классов WMI, и вам нужно будет работать с классом Win32_LogicalDisk (https://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx), который имеет FreeSpace элемент.

+0

У вас есть идеи по API окон GetDiskFreeSpaceEx. Я использую этот API для получения свободного места на жестком диске. Но я получаю небольшие значения. Ниже приведен код, который я использую. int main (void) { LPCWSTR pszDrive = NULL; BOOL test, fResult; __int64 lpFreeBytesAvailable, lpTotalNumberOfBytes, lpTotalNumberOfFreeBytes; DWORD dwSectPerClust, dwBytesPerSect, dwFreeClusters, dwTotalClusters; тест = GetDiskFreeSpaceEx ( pszDrive, (PULARGE_INTEGER) & lpFreeBytesAvailable, (PULARGE_INTEGER) & lpTotalNumberOfBytes, (PULARGE_INTEGER) & lpTotalNumberOfFreeBytes ); return 0; } –