設置 | 登錄 | 註冊

目前共有6篇帖子。

【方法】獲取磁碟容量

1樓 巨大八爪鱼 2016-3-4 22:50
#include <iostream>
#include <Windows.h>

using namespace std;

int main(void)
{
    DWORD dwSPC, dwBPS, dwNOFC, dwTNOC;
    GetDiskFreeSpace(TEXT("C:\\"), &dwSPC, &dwBPS, &dwNOFC, &dwTNOC);
    cout << dwSPC << endl;
    cout << dwBPS << endl;
    cout << dwNOFC << endl;
    cout << dwTNOC << endl << endl;

    DWORD64 dw64 = dwSPC * dwBPS;
    cout << "可用空間: " << (dw64 * dwNOFC) / 1024.0 / 1024.0 / 1024.0 << "GB" << endl;
    cout << "容量: " << (dw64 * dwTNOC) / 1024.0 / 1024.0 / 1024.0 << "GB"  << endl;

    system("pause");
    return 0;
}
2樓 巨大八爪鱼 2016-3-4 22:50
【輸出】
8
512
3917916
50331647

可用空間: 14.9457GB
容量: 192GB
Press any key to continue . . .
3樓 巨大八爪鱼 2016-3-4 22:57
【另一種方法】
ULARGE_INTEGER FBAT, TNOB, TNOFB;
GetDiskFreeSpaceEx(TEXT("C:\\"), &FBAT, &TNOB, &TNOFB);
memcpy(&dw64, &FBAT.LowPart, sizeof(DWORD64));
cout << "總可用字節數: " << dw64 << endl;
memcpy(&dw64, &TNOB.LowPart, sizeof(DWORD64));
cout << "容量: " << dw64 << endl;
memcpy(&dw64, &TNOFB.LowPart, sizeof(DWORD64));
cout << "用戶可用字節數: " << dw64 << endl;
4樓 巨大八爪鱼 2016-3-5 00:06
memcpy用於將ULARGE_INTEGER轉化為DWORD64
5樓 巨大八爪鱼 2016-7-17 20:20

ULARGE_INTEGER是一個共用體類型:

typedef union _ULARGE_INTEGER {
  struct {
    DWORD LowPart;
    DWORD HighPart;
  };
  struct {
    DWORD LowPart;
    DWORD HighPart;
  } u;
  ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;

如果編譯器支持64位的類型,那麼直接用x.QuadPart成員就行了,

如果不支持,就用x.LowPart和x.HighPart來訪問(和x.u.LowPart和x.u.HighPart等價)

 

因此獲取磁碟容量時可以不用memcpy,直接輸出就行了:

ULARGE_INTEGER FBAT, TNOB, TNOFB;
GetDiskFreeSpaceEx(TEXT("C:\\"), &FBAT, &TNOB, &TNOFB);

cout << "總可用字節數: " << FBAT.QuadPart << endl;
cout << "容量: " << TNOB.QuadPart << endl;
cout << "用戶可用字節數: " << TNOFB.QuadPart << endl;

6樓 巨大八爪鱼 2016-7-17 20:21

GetDiskFreeSpaceEx(磁碟, 總可用空間, 容量, 用戶可用空間);

.QuadPart就是字節數了

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。