我已使用此 c++ 代码在 Windows 中查找某些文件的文件大小(使用 Visual Studio):
(p_findFileData->nFileSizeHigh * MAXDWORD) + p_findFileData->nFileSizeLow);
如果文件大于 4gb,这并没有给我正确的文件大小。经过一些研究,我尝试了:
(p_findFileData->nFileSizeHigh * (MAXDWORD+1)) + p_findFileData->nFileSizeLow);
当我读到 nfilesizehigh 和 nfilesizelow 是文件大小的 64 位值中的每个 32 位时,如果文件大小值大于 32 位,我们将 maxdword(在我的情况下为 0xffffffff)乘以 nfilesizehigh。第二种解决方案也不起作用,并且给了我比原来更小的尺寸。我再次尝试了这个:
ULONGLONG FileSize = (FindFileData.nFileSizeHigh * 4294967296) + FindFileData.nFileSizeLow;
它奏效了。此外,我还使用了另一种解决方案来获取文件大小:
ULONGLONG FileSize = FindFileData.nFileSizeHigh;
FileSize <<= sizeof( FindFileData.nFileSizeHigh ) *8;
FileSize |= FindFileData.nFileSizeLow;
上述解决方案也有效:
我想知道为什么前两个解决方案不起作用,如果可能的话,我还想知道最后一个解决方案的解释,因为我想知道代码的内部工作。帮助将不胜感激。