GetFileSizeEx在System32目录上返回不正确的值

时间:2014-03-13 23:33:35

标签: c winapi filesize system32

我遇到了一个关于GetFileSize和GetFileSizeEx API的非常奇怪的问题。

两个函数都可以在每个输入文件上正常工作,除了System32目录中的文件外。

例如:

如果我在calc.exe上使用其中一个API(在System32中),我将获得776192字节的返回值,即使它的实际大小为918,528字节!

System32中的其他可执行文件也会发生这种情况(Regedit,calcs ..)。

GetFileSizeEx的返回值为TRUE,未报告错误。

如果我将calc.exe复制到另一个目录(Say C:\),则API会返回正确的字节数。

我的猜测是System32目录中的文件是如何压缩的?

或类似的东西,GetFileSize API返回其压缩大小,而不是实际大小。

有人知道为什么会这样吗?

我正在运行Windows 7 SP1。

1 个答案:

答案 0 :(得分:5)

您要求c:\windows\system32下的文件,但您可能会从c:\windows\syswow64\获取文件。

在我的系统上,c:\ windows \ system32 \下的calc.exe是 897KB 。在syswow64下,它 758KB

在此处阅读有关文件系统重定向器的更多信息:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v=vs.85).aspx