【发布时间】: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