設置 | 登錄 | 註冊

目前共有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許可協議進行許可。