我遇到了一个关于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。
答案 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