作者共發了6篇帖子。 字體大小:較小 - 100% (默認)▼  內容轉換:不轉換▼
 
點擊 回復
370 5
【方法】获取磁盘容量
一派護法 十九級
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就是字节数了

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:370 回複數:5
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-7-17 20:21
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。