您的位置:首页 > 其它

【磁盘处理相关方法】2,得到磁盘总空间、可用剩余空间

2014-01-12 20:06 351 查看

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 DiskHelper::GetDiskFreeSpaceAsGB(WCHAR cDiskName)
{
FLOAT fFreeSpaceAsGB = 0.0f;

ULARGE_INTEGER   uiFreeBytesAvailableToCaller;
ULARGE_INTEGER   uiTotalNumberOfBytes;
ULARGE_INTEGER   uiTotalNumberOfFreeBytes;

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

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


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

3,效果

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: