如何使用 ULARGE_INTEGER 进行算术运算

2 c c++ windows winapi

我有一个应用程序,我不断检查磁盘空间并将其与特定值进行比较。现在磁盘空间计算如下:

ULARGE_INTEGER p1;
ULARGE_INTEGER p2;
ULARGE_INTEGER p3;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3); 
Run Code Online (Sandbox Code Playgroud)

现在从上面的方法我得到了变量 p3 中的可用空间。现在我如何将它与一个正常的整数值进行比较(算术运算)。此外,此代码必须在 32 位和 64 位平台上工作。或者如果有任何其他选项来计算可用磁盘空间?谢谢

sel*_*bie 7

ULARGE_INTEGER 是 Windows API 在编译器具有本机 64 位类型之前表示 64 位值的方式。

今天,在带有 Visual C++ 编译器的 Windows 上,在ULARGE_INTEGER*64 位本机类型(如uint64_t*or )之间进行指针转换是安全的unsigned long long*

int compile_time_assert[(sizeof(ULARGE_INTEGER) == sizeof(unsigned long long)) ? 1 : -1];

unsigned long long freebytes = 0;
unsigned long long totalbytes = 0;
unsigned long long totalfree = 0;
GetDiskFreeSpaceEx(".", (ULARGE_INTEGER*)&freebytes, (ULARGE_INTEGER*)&totalbytes, (ULARGE_INTEGER*)&totalfree);
Run Code Online (Sandbox Code Playgroud)

否则,如果你想避免演员阵容,你可以这样做:

ULARGE_INTEGER p1 = {0};
ULARGE_INTEGER p2 = {0};
ULARGE_INTEGER p3 = {0};
unsigned long long freebytes = 0;
unsigned long long totalbytes = 0;
unsigned long long totalfree = 0;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3); 

freebytes = p1.QuadPart;
totalbytes = p2.QuadPart;
totalfree = p3.QuadPart;
Run Code Online (Sandbox Code Playgroud)

  • @chux - 如果我还记得,MSVC 编译器在 1998 年左右在 Visual Studio 6.0 期间和可能在 C99 之前引入了`__int64` 类型。一些 API 需要 `(U)LARGE_INTEGER`,例如磁盘空间和 `QueryPerformanceCounter` API。这些 API 可能存在于 Windows NT 3.5 天(1994 年)。 (2认同)