逆枫゛

Qt学习群:1149411109 群文件提供博客源码,定期答疑、更新学习资料。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1,涉及的API


GetDiskFreeSpaceEx,声明如下:

WINBASEAPI
BOOL
WINAPI
GetDiskFreeSpaceExA(
    __in_opt  LPCSTR lpDirectoryName,
    __out_opt PULARGE_INTEGER lpFreeBytesAvailableToCaller,
    __out_opt PULARGE_INTEGER lpTotalNumberOfBytes,
    __out_opt PULARGE_INTEGER lpTotalNumberOfFreeBytes
    );
WINBASEAPI
BOOL
WINAPI
GetDiskFreeSpaceExW(
    __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是驱动器的名称。注意需要传入"C:","D:"形式的名称。

lpFreeBytesAvailableToCaller 接收用户可用的磁盘空间。

lpTotalNumberOfBytes 接收磁盘总共的空间。

lpTotalNumberOfFreeBytes 接收磁盘空闲的空间。

以上都是字节为单位。


2,使用

这里我们获取一个GB为单位的的浮点数磁盘大小。
FLOAT GetDiskFreeSpaceAsGB(WCHAR cDiskName)
{
    FLOAT fFreeSpaceAsGB = 0.0f;

    ULARGE_INTEGER   uiFreeBytesAvailableToCaller;
    ULARGE_INTEGER   uiTotalNumberOfBytes;
    ULARGE_INTEGER   uiTotalNumberOfFreeBytes;

    WCHAR szPath[2] = {0};
    swprintf(szPath,L"%c:",cDiskName);

    if(GetDiskFreeSpaceExW(szPath,
        &uiFreeBytesAvailableToCaller,
        &uiTotalNumberOfBytes,
        &uiTotalNumberOfFreeBytes))
    {
        fFreeSpaceAsGB = (FLOAT)((LONGLONG)(uiFreeBytesAvailableToCaller.QuadPart)/1024.0f/1024.0f/1024.f);
    }
    return fFreeSpaceAsGB;
}



同样的,获取总空间大小,就使用uiTotalNumberOfBytes这个值就可以了。


3,效果




posted on 2014-01-12 20:07  逆枫゛  阅读(180)  评论(0编辑  收藏  举报