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

标签 c winapi filesize system32

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

除了来自 System32 目录的文件外,这两个函数都适用于每个输入文件。

例如:

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

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

GetFileSizeEx的返回值为TRUE,没有报错。

如果我将 calc.exe 复制到不同的目录(比如 C:\),API 会返回正确的字节数。

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

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

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

我运行的是 Windows 7 SP1。

最佳答案

您在 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

关于c - GetFileSizeEx 在 System32 目录上返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393252/

相关文章:

c - block 作用域和内部链接?

c++ - 用 OpenGL 绘制三角形 : how to manage with two classes

ruby - 在 Win32 上,如何使用 Perl、Python 或 Ruby(或 C)检测是否按下了 Left Shift 或 Right ALT?

php获取图片的KB大小

c# - 图像大小调整导致文件大小比原始 C# 大得多

java - 查找已安装应用程序的 APK 大小

c - 这是 C 中合法的正则表达式模式吗?

c - 如何构建 libion​​?

c - 试图定义函数来反转字符串

delphi - 如何重新启动用 Delphi 编写的 Windows 服务应用程序?