这里我的代码:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile("C:\\Windows10.official.16.November.2016.iso",&FindFileData);
if ( hFind == INVALID_HANDLE_VALUE )
cout << "Can't Find the File\n";
cout << ( ( FindFileData.nFileSizeHigh * ( MAXDWORD + 1 ) ) + FindFileData.nFileSizeLow );
return 0;
}
输出是:
2300968960
但实际文件大小为6.14 GB 所以输出应该像
6592774799
任何人都可以帮助我吗?
答案 0 :(得分:0)
您需要做的是将表达式( ( FindFileData.nFileSizeHigh * ( MAXDWORD + 1 ) ) + FindFileData.nFileSizeLow )
的至少一部分扩展为64位以防止32位溢出。
我在这里使用位操作,因为我觉得这样的事情更自然,但同样的原则适用:
uint32_t hi = 0x12345678, lo = 0x90ABCDEF;
uint64_t hilo = ( static_cast<uint64_t>( hi ) << 32 ) | lo;
因此将hi
转换为64位将确保整个计算以64位完成。