目前共有6篇帖子。 字体大小:较小 - 100% (默认)▼  内容转换:不转换▼
 
点击 回复
364 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)
 

本帖信息

点击数:364 回复数:5
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2016-7-17 20:21
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。