【发布时间】:2010-01-07 06:47:42
【问题描述】:
由于扩展大型 gzip 文件需要很长时间(有时超过半分钟),因此我想在开始扩展之前知道扩展后的大小(用于进度报告)。有没有办法在不实际扩展的情况下知道它?
更新:
对于大于 4G 字节(扩展大小)的文件,如果不实际扩展 gzip 文件,就无法确定大小。但是,对于小于 4G 字节(扩展大小)的文件,实际扩展大小存储为 gzip 文件的最后 4 个字节,可以轻松检索:
(1..4).inject(0) do |v, i|
v += IO.read(file_name, 1, original_size - i)[0] * (2**8) ** (4 - i)
end
【问题讨论】:
-
接近重复,正确答案包含在此处:get the filesize of very large .gz file on a 64bit platform,请查看 Kevin 的答案 - TL;DR:不,没有办法,因为 ISIZE 是“模 32 位”。对于大于 4G 的文件,需要解析整个文件来学习未压缩的长度。