【问题标题】:GetFileSizeEx Returns Incorrect Value on System32 DirGetFileSizeEx 在 System32 目录上返回不正确的值
【发布时间】:2014-03-13 23:33:34
【问题描述】:

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

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

例如:

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

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

GetFileSizeEx的返回值为TRUE,不报错。

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

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

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

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

我正在运行 Windows 7 SP1。

【问题讨论】:

  • GetFileSize 函数检索文件的未压缩大小。 , GetFileSize
  • 即使文件被压缩,GetFileSize/Ex() 也会报告未压缩的大小。有一个单独的GetCompressedFileSize() 来获取压缩 大小。所以这不是问题。
  • 你是一个运行在 64 位系统上的 32 位应用程序,这意味着你得到的是file system redirection
  • 哇!我永远不会想到这一点,非常感谢:)

标签: c winapi filesize system32


【解决方案1】:

您请求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

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 2021-10-26
    • 2015-10-13
    • 2014-12-06
    • 2021-02-01
    • 2017-08-21
    相关资源
    最近更新 更多