今天项目中需要计算win10系统中所有硬盘的内存和,查阅相关资料,最终找到合适的方法,下面介绍一下。
接口介绍
GetDiskFreeSpaceExA()
原型:
WINBASEAPI
BOOL
WINAPI
GetDiskFreeSpaceExA(
_In_opt_ LPCSTR lpDirectoryName, // 磁盘卷名,如C:\\ D:\\ 等
_Out_opt_ PULARGE_INTEGER lpFreeBytesAvailableToCaller,
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfBytes, // 当前磁盘的内存大小
_Out_opt_ PULARGE_INTEGER lpTotalNumberOfFreeBytes // 当前磁盘总的剩余内存
);
实现方法
如果只有一个磁盘,只需要计算当前磁盘的大小,如果有多个磁盘,利用for循环的方式计算出每个磁盘的大小,最终求所有磁盘的总和。
实现代码
#include <Windows.h>
#include <fileapi.h>
#include <qdebug.h>
float GetDiskTotalMemory(const char drive_letter)
{
BOOL fResult;
unsigned long long freeBytesToCaller;
unsigned long long totalBytes;
unsigned long long freeBytes;
char dir[4] = { drive_letter, ':', '\\', '\0'};
qDebug()<<"start "<<sizeof(totalBytes)<<endl;
fResult = GetDiskFreeSpaceExA(
dir,
(PULARGE_INTEGER)&freeBytesToCaller,
(PULARGE_INTEGER)&totalBytes,
(PULARGE_INTEGER)&freeBytes);
if (fResult) {
qDebug()<< totalBytes<<endl;
return (float)totalBytes/(1024 * 1024 * 1024);
}
return -1;
}
int main(int argc, char *argv[])
{
float ret = GetDiskTotalMemory('c');
qDebug()<<"ret "<<ret<<endl;
int a;
scanf("%d", &a); // 阻塞程序结束
return 0;
}