天天看點

Windows API一日一練GetDiskFreeSpaceEx函數Windows API一日一練(62)GetDiskFreeSpaceEx函數

  有一次客戶給我打來了投訴電話,說我的軟體太不好用了,導緻他們丢失了很多資料。後來我仔細地檢視LOG,分析出來的原因,其實是很簡單的,就是磁盤的空間不夠了。我給客戶說他們的電腦磁盤空間不夠了導緻出錯的問題,但客戶反問我為什麼不提示磁盤空間不足。是啊,為什麼不提示磁盤的空間不足呢?為了解決這個需求,就需要使用到這個函數GetDiskFreeSpaceEx。

  函數GetDiskFreeSpaceEx聲明如下:

<code>WINBASEAPI</code>

<code>BOOL</code>

<code>WINAPI</code>

<code>GetDiskFreeSpaceExA(</code>

<code>    __in_opt LPCSTR lpDirectoryName,</code>

<code>    __out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller,</code>

<code>    __out_opt PULARGE_INTEGER lpTotalNumberOfBytes,</code>

<code>    __out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes</code>

<code>    );</code>

<code>GetDiskFreeSpaceExW(</code>

<code>    __in_opt LPCWSTR lpDirectoryName,</code>

<code>#ifdef UNICODE</code>

<code>#define GetDiskFreeSpaceEx GetDiskFreeSpaceExW</code>

<code>#else</code>

<code>#define GetDiskFreeSpaceEx GetDiskFreeSpaceExA</code>

<code>#endif // !UNICODE</code>

  lpDirectoryName是驅動器的名稱。

  lpFreeBytesAvailableToCaller是使用者可用的磁盤空間。

  lpTotalNumberOfBytes是磁盤總共的空間。

  lpTotalNumberOfFreeBytes是磁盤空閑的空間。以上都是位元組為機關。

  調用函數的例子如下:

<code>#001  //擷取磁盤剩餘空間。</code>

<code>#002  //蔡軍生 2007/11/01 QQ:9073204 深圳</code>

<code>#003  void DiskFree(void)</code>

<code>#004  {</code>

<code>#005         //</code>

<code>#006         ULARGE_INTEGER nFreeBytesAvailable;</code>

<code>#007         ULARGE_INTEGER nTotalNumberOfBytes;</code>

<code>#008         ULARGE_INTEGER nTotalNumberOfFreeBytes;</code>

<code>#009         //</code>

<code>#010         if (GetDiskFreeSpaceEx(_T("C:"),</code>

<code>#011               &amp;nFreeBytesAvailable,</code>

<code>#012               &amp;nTotalNumberOfBytes,</code>

<code>#013               &amp;nTotalNumberOfFreeBytes))</code>

<code>#014         {</code>

<code>#015               TCHAR chBuf[256];</code>

<code>#016               wsprintf(chBuf,_T("Av=%I64d,Total=%I64d,Free=%I64drn"),</code>

<code>#017                    nFreeBytesAvailable,</code>

<code>#018                    nTotalNumberOfBytes,</code>

<code>#019                    nTotalNumberOfFreeBytes);</code>

<code>#020               OutputDebugString(chBuf);</code>

<code>#021         }</code>

<code>#022  }</code>

<code></code>

<code>本文轉自 bilinyee部落格,原文連結:    </code>http://blog.51cto.com/215363/955734    如需轉載請自行聯系原作者      

繼續閱讀