【发布时间】:2013-02-18 23:38:21
【问题描述】:
我已使用此 c++ 代码在 windows 中查找某些文件的文件大小(使用 Visual Studio):
(p_findFileData->nFileSizeHigh * MAXDWORD) + p_findFileData->nFileSizeLow);
如果文件大于 4gb,这并没有给我正确的文件大小。经过一番研究,我尝试了:
(p_findFileData->nFileSizeHigh * (MAXDWORD+1)) + p_findFileData->nFileSizeLow);
当我读到 nfilesizehigh 和 nfilesizelow 分别是 32 位的文件大小的 64 位值时,如果文件大小值大于 32 位,我们将 maxdword(在我的情况下为 0xffffffff)乘以 nfilesizehigh。第二种解决方案也不起作用,并且给了我比原来更小的尺寸。我又试了一次:
ULONGLONG FileSize = (FindFileData.nFileSizeHigh * 4294967296) + FindFileData.nFileSizeLow;
它奏效了。此外,我还使用了另一种解决方案来获取文件大小:
ULONGLONG FileSize = FindFileData.nFileSizeHigh;
FileSize <<= sizeof( FindFileData.nFileSizeHigh ) *8;
FileSize |= FindFileData.nFileSizeLow;
上述解决方案也有效:
我想知道为什么前两个解决方案不起作用,如果可能的话,我想知道最后一个解决方案的解释,因为我想知道代码的内部工作。非常感谢您的帮助。
【问题讨论】:
标签: c++ windows visual-studio winapi