我有一个应用程序,我不断检查磁盘空间并将其与特定值进行比较。现在磁盘空间计算如下:
ULARGE_INTEGER p1;
ULARGE_INTEGER p2;
ULARGE_INTEGER p3;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3);
现在从上面的方法我得到变量p3中的空闲可用空间。现在我如何比较(算术运算)它与普通的整数值。此外,此代码必须在32位和64位平台上工作。或者,如果有任何其他选项来计算可用磁盘空间?谢谢
答案 0 :(得分:3)
这假设您的程序针对的是Win SDK中定义ULARGE_INTEGER
类型的Windows。
ULARGE_INTEGER
是一个包含QuadPart
成员的联合,该成员是整数的64位值。所以只需做一些事情:
if (p1.QuadPart < p2.QuadPart) ...
这也适用于32位版本,因为目前Win32的编译器已经支持64位整数类型(可能是从Win32开始以来)。
答案 1 :(得分:3)
ULARGE_INTEGER是在编译器具有本机64位类型之前,Windows API如何表示64位值。
今天,在使用Visual C ++编译器的Windows上,可以安全地在ULARGE_INTEGER*
和64位本机类型(例如uint64_t*
或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);
否则,如果你想避免演员hackery,你可以这样做:
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;