Settings | Sign in | Sign up

There are currently 6 posts.

【方法】获取磁盘容量

Floor 1 巨大八爪鱼 3/4/16 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;
}
Floor 2 巨大八爪鱼 3/4/16 22:50
【输出】
8
512
3917916
50331647

可用空间: 14.9457GB
容量: 192GB
Press any key to continue . . .
Floor 3 巨大八爪鱼 3/4/16 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;
Floor 4 巨大八爪鱼 3/5/16 0:06
memcpy用于将ULARGE_INTEGER转化为DWORD64
Floor 5 巨大八爪鱼 7/17/16 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;

Floor 6 巨大八爪鱼 7/17/16 20:21

GetDiskFreeSpaceEx(磁盘, 总可用空间, 容量, 用户可用空间);

.QuadPart就是字节数了

Content converter:

Reply the post
Content:
User: You are currently anonymous.
Captcha:
Unclear? Try another one.