我有一个应用程序,我不断地检查磁盘空间,并将其与特定值进行比较。现在磁盘空间的计算公式为:
ULARGE_INTEGER p1;
ULARGE_INTEGER p2;
ULARGE_INTEGER p3;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3); 现在,从上面的方法中,我获得了变量p3中的空闲可用空间。现在我如何将它与正常的整数值进行比较(算术运算也是如此)。此外,此代码必须在32位以及64位平台上工作。或者是否有任何其他选项来计算可用磁盘空间?谢谢
发布于 2017-10-18 00:02:29
在编译器拥有本机64位类型之前,ULARGE_INTEGER是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);否则,如果你想避免强制转换,你可以这样做:
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;发布于 2017-10-17 23:50:31
这是假设您的程序以Win中定义了ULARGE_INTEGER类型的Windows为目标。
ULARGE_INTEGER是一个联合,它包含一个QuadPart成员,该成员是整数的64位值。所以只要像这样做就行了:
if (p1.QuadPart < p2.QuadPart) ...这也适用于32位版本,因为64位整数类型已经被面向Win32的编译器支持了很长一段时间(可能是从Win32诞生之日起)。
https://stackoverflow.com/questions/46794133
复制相似问题