今日のプロジェクトでは、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 // 当前磁盘总的剩余内存
);
実装
ディスクが1つしかない場合は、現在のディスクのサイズを計算するだけで済みます。複数のディスクがある場合は、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;
}