最近的项目开发要将原本只获取C盘的空间使用率升级为获取所有磁盘空间使用率。便写了一个例子来学习了一下如何获取Windows系统的盘符信息。
首先获得系统所有磁盘的盘符,再判断是否为本地磁盘,如果是本地磁盘,调用get_disk_space()方法,获取该磁盘的磁盘空间。
DWORD dwDriveStrLen;
TCHAR wDrivesName[0x100];
int DType;
dwDriveStrLen = sizeof(wDrivesName);
GetLogicalDriveStrings(dwDriveStrLen, wDrivesName);
TCHAR *p = (TCHAR *)wDrivesName;
while (*p)
{
//这里还涉及到如果你想要通过Unicode来编码那么需要将tchar 转string。
//如果采用多字节字符集编码则可以直接转换
string s = q; //转换是为了进行输出时的字符拼接,需要根据自己实际需求进行灵活变通
DType = GetDriveType(LPTSTR(p));
if (DType == DRIVE_FIXED)
{
//这里调用get_disk_space(s.at(0), allSpace, freeSpace)方法
//用获取到的allSpace和freeSpace来计算使用率即可
}
p += (_tcslen(p) + 1);
}
get_disk_space()方法:
BOOL get_disk_space(char driver, __int64& allSpace, __int64& freeSpace)
{
BOOL ret = false;
DWORD dwSector;
DWORD dwBytesInSec;
DWORD dwCluster;
DWORD dwFreeCluster;
string sDriver;
sDriver += driver;
sDriver += ":\\";
ret = GetDiskFreeSpace(sDriver.c_str(), &dwSector, &dwBytesInSec, &dwFreeCluster, &dwCluster);
allSpace = 0;
freeSpace = 0;
allSpace = dwSector;
allSpace *= dwBytesInSec;
allSpace *= dwCluster;
freeSpace = dwSector;
freeSpace *= dwBytesInSec;
freeSpace *= dwFreeCluster;
return ret;
}
编译结果: