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

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,效果

【磁盘处理相关方法】2,得到磁盘总空间、可用剩余空间_第1张图片



你可能感兴趣的:(【磁盘处理相关方法】2,得到磁盘总空间、可用剩余空间)