我使用此 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;
上述解决方案也有效:
我想知道为什么前两个解决方案不起作用,并且如果可能的话还解释最后一个解决方案,因为我想知道代码的内部工作原理。帮助将不胜感激。
Use the ULARGE_INTEGER
struct 来组合这些值,而不是尝试手动计算/移动它们:
ULARGE_INTEGER ul;
ul.HighPart = p_findFileData->nFileSizeHigh;
ul.LowPart = p_findFileData->nFileSizeLow;
ULONGLONG FileSize = ul.QuadPart;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)