在VC中獲得盤符容量信息的函數只要有兩個,分別爲:
BOOL WINAPI GetDiskFreeSpace(
__in LPCTSTR lpRootPathName, //傳入用戶在該磁盤的盤符
__out LPDWORD lpSectorsPerCluster, //返回一簇有多少扇區
__out LPDWORD lpBytesPerSector, //返回一個扇區有多個字節
__out LPDWORD lpNumberOfFreeClusters, //返回當前盤符剩餘多少空間
__out LPDWORD lpTotalNumberOfClusters //當前盤符有多少空間
);
BOOL WINAPI GetDiskFreeSpaceEx(
__in LPCTSTR lpDirectoryName, //傳入用戶在該磁盤的盤符
__out PULARGE_INTEGER lpFreeBytesAvailable, //當前用戶可用多少空間
__out PULARGE_INTEGER lpTotalNumberOfBytes, //當前盤符有多空間
__out PULARGE_INTEGER lpTotalNumberOfFreeBytes //當前盤符一共剩餘多少空間
);
第一個函數用於當前盤符小於2GB容量,後一個函數用處比較廣。
下面代碼使用第二個函數獲得信息。
CString msgStr;
ULARGE_INTEGER a1 ,a2 ,a3;
if (GetDiskFreeSpaceEx(_T("D:"),(PULARGE_INTEGER)&a1,(PULARGE_INTEGER)&a2,(PULARGE_INTEGER)&a3) != 0)
{
double d1,d2,d3;
d1 = (double)a1.QuadPart / 1024 / 1024 / 1024;
d2 = (double)a2.QuadPart / 1024 / 1024 / 1024;
d3 = (double)a3.QuadPart / 1024 / 1024 / 1024;
msgStr.Format("盤符:D:/n當前用戶剩餘容量:%.3fGB/n總的容量:%.3fGB/n剩餘容量:%.3fGB/n",d1,d2,d3);
MessageBox(msgStr);
}
else
{
MessageBox("失敗");
}
運行結果: