有一次客戶給我打來了投訴電話,說我的軟體太不好用了,導致他們丟失了很多資料。後來我仔細地查看LOG,分析出來的原因,其實是很簡單的,就是磁碟的空間不夠了。我給客戶說他們的電腦磁碟空間不夠了導致出錯的問題,但客戶反問我為什麼不提示磁碟空間不足。是啊,為什麼不提示磁碟的空間不足呢?為瞭解決這個需求,就需要使用到這個函數GetDiskFreeSpaceEx。 函數GetDiskFreeSpaceEx聲明如下: WINBASEAPIBOOLWINAPIGetDiskFreeSpaceExA( __in_opt LPCSTR lpDirectoryName, __out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller, __out_opt PULARGE_INTEGER lpTotalNumberOfBytes, __out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes );WINBASEAPIBOOLWINAPIGetDiskFreeSpaceExW( __in_opt LPCWSTR lpDirectoryName, __out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller, __out_opt PULARGE_INTEGER lpTotalNumberOfBytes, __out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes );#ifdef UNICODE#define GetDiskFreeSpaceEx GetDiskFreeSpaceExW#else#define GetDiskFreeSpaceEx GetDiskFreeSpaceExA#endif // !UNICODE lpDirectoryName是磁碟機的名稱。lpFreeBytesAvailableToCaller是使用者可用的磁碟空間。lpTotalNumberOfBytes是磁碟總共的空間。lpTotalNumberOfFreeBytes是磁碟閒置空間。以上都是位元組為單位。 調用函數的例子如下:#001 //擷取磁碟剩餘空間。#002 //蔡軍生 2007/11/01 QQ:9073204 深圳#003 void DiskFree(void)#004 {#005 //#006 ULARGE_INTEGER nFreeBytesAvailable;#007 ULARGE_INTEGER nTotalNumberOfBytes;#008 ULARGE_INTEGER nTotalNumberOfFreeBytes;#009 //#010 if (GetDiskFreeSpaceEx(_T("C:"),#011 &nFreeBytesAvailable,#012 &nTotalNumberOfBytes,#013 &nTotalNumberOfFreeBytes))#014 {#015 TCHAR chBuf[256];#016 wsprintf(chBuf,_T("Av=%I64d,Total=%I64d,Free=%I64d/r/n"),#017 nFreeBytesAvailable,#018 nTotalNumberOfBytes,#019 nTotalNumberOfFreeBytes);#020 OutputDebugString(chBuf);#021 }#022 }