2010-01-07 39 views
2

由于扩展一个大的gzip文件需要相当长的时间(有时超过半分钟),所以我想在扩展之前知道扩展的大小(用于进度报告目的)。有没有一种方法知道它没有实际扩大?有没有办法在不实际扩展的情况下获得扩展的gzip文件大小?

更新

对于文件超过4G字节(扩大规模)大的,有知道的大小,而不实际扩展gzip文件没有确切方法。然而,对于超过4G字节(扩大规模)小文件,实际尺寸扩展存储为最后4个字节的gzip文件,并可以很容易地检索:

(1..4).inject(0) do |v, i| 
    v += IO.read(file_name, 1, original_size - i)[0] * (2**8) ** (4 - i) 
end 
+1

Duplicate:http://stackoverflow.com/questions/1965567/get-the-filesize-of-very-large-gz-file-on-a-64bit-platform/1965580#1965580 – pavium 2010-01-07 07:13:08

+0

接近重复,并在这里包含**正确答案**:[获取64位平台上非常大的.gz文件的文件大小](http://stackoverflow.com/questions/1965567/get-the-filesize-of-very-大的gz-file-on-a-64bit平台),请**参见凯文的回答** - TL; DR:不,没有办法,因为ISIZE是“模32位”。对于文件> 4G,您需要解析整个文件以了解未压缩的长度。 – quetzalcoatl 2017-03-19 11:08:19

回答

2

只想关闭这个问题,因为我找到了解决方案。已经在上面更新了它。

1

我不认为你可以得到一个确切的大小,因为这需要知道文件中各种字符串的实际频率,并且不扫描文件就无法做到这一点。你可以进入实际的解压缩功能,并指出它的输入有多远(相对于输出有多远)?

相关问题