使用的API函數有:
1、
GetLogicalDriveStrings 用於獲取邏輯驅動器字符串
函數原型:DWORD GetLogicalDriveStrings(DWORD nBufferLength,
LPTSTR lpBuffer);
LPTSTR lpBuffer);
LPTSTR:
字符/字符串指針
函數需要提供一個內存緩沖區lpBuffer
來供它保存獲取的邏輯驅動器的分區號(C:\ ,D:\等)信息。
2、GetDriveType 邏輯驅動器類型
函數聲明如下:
UINT WINAPI GetDriveType(
_In_opt_ LPCTSTR lpRootPathName
);
用於判斷一個磁盤驅動器的類型
如驅動器不能識別,則返回零。如指定的目錄不存在,則返回1。如執行成功,則返回指定驅動器類型
3、GetDiskFreeSpaceEx 獲取邏輯驅動器的容量信息
函數執行成功返回非0值,失敗返回0。
4、GetLogicalDrives:
DWORD GetLogicalDrives(void); 返回值:GetLogicalDrives函數返回一個DWORD類型的值,第一位表示所對應的驅動器是否存在。一般情況下DWORD的數據長度是32位,在這個DWORD中,每一位對應了一個邏輯驅動器是否存在。第二位如果是“1”則表示驅動器“B:”存在,第四位如果是“1”則表示驅動器“D:”存在,以此類推。
以下為代碼示例:
#include <stdio.h>
#include <Windows.h>
#define GB(x) (x.HighPart << 2) + (x.LowPart >> 20) / 1024.0 // 轉換為GB單位顯示
void putDrivesType(const char* lpRootPathName);
void putDrivesFreeSpace(const char* lpRootPathName);
int main()
{
int count = 0;
DWORD dw ;
DWORD dwSize = MAX_PATH;
char szLogicalDrives[MAX_PATH] = {0}; //緩沖區
DWORD dwResult = GetLogicalDriveStrings(dwSize,szLogicalDrives); //獲取邏輯驅動器號字符串
//獲取驅動器數
dw = GetLogicalDrives();
while( dw != 0 )
{
if(dw&1 != 0)
{
count++;
}
dw>>=1;
}
printf("驅動器個數:%d\n",count);
//處理獲取到的結果
if (dwResult > 0 && dwResult <= MAX_PATH) {
char* szSingleDrive = szLogicalDrives; //從緩沖區起始地址開始
while(*szSingleDrive) {
printf("Drive: %s ", szSingleDrive); //輸出單個驅動器的驅動器號
putDrivesType(szSingleDrive); //輸出邏輯驅動器類型
putDrivesFreeSpace(szSingleDrive); //獲取磁盤空間信息
printf("----------------------------\n");
// 獲取下一個驅動器號起始地址
szSingleDrive += strlen(szSingleDrive) + 1;
}
}
return 0;
}
void putDrivesType(const char* lpRootPathName)
{
UINT uDriverType = GetDriveType(lpRootPathName);
switch(uDriverType) {
case DRIVE_UNKNOWN :puts("未知的磁盤類型"); break;
case DRIVE_NO_ROOT_DIR: puts("路徑無效"); break;
case DRIVE_REMOVABLE: puts("可移動磁盤"); break;
case DRIVE_FIXED: puts("固定磁盤"); break;
case DRIVE_REMOTE: puts("網絡磁盤"); break;
case DRIVE_CDROM: puts("光驅"); break;
case DRIVE_RAMDISK: puts("內存映射盤"); break;
default:
break;
}
}
void putDrivesFreeSpace(const char* lpRootPathName)
{
ULARGE_INTEGER available,total,free; //ULARGE_INTEGER 一個64位的無符號整型值
if(GetDiskFreeSpaceEx(lpRootPathName,(ULARGE_INTEGER*)&available,(ULARGE_INTEGER*)&total,(ULARGE_INTEGER*)&free)){
printf(" | 總容量 = %.2f GB,可用空間 = %.2f GB,空閑空間 = %.2f GB\n",
GB(total),GB(available),GB(free));
}else{
puts("獲取容量信息失敗");
}
}