Windows開発-QTはすべてのハードディスクのメモリを取得します

今日のプロジェクトでは、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;
}

おすすめ

転載: blog.csdn.net/PRML_MAN/article/details/113990074