Como a expansão de um arquivo gzip grande leva bastantemuito tempo (às vezes mais de meio minuto), eu gostaria de saber o tamanho expandido antes de iniciar a expansão (para fins de relatório de progressão). Existe uma maneira de conhecê-lo sem realmente expandir?
Atualizar:
Para arquivos maiores que 4G bytes (tamanho expandido),não há como saber o tamanho sem expandir o arquivo gzip. No entanto, para arquivos menores que 4G bytes (tamanho expandido), o tamanho expandido real é armazenado como os últimos 4 bytes do arquivo gzip e pode ser recuperado facilmente :
(1..4).inject(0) do |v, i|
v += IO.read(file_name, 1, original_size - i)[0] * (2**8) ** (4 - i)
end
Respostas:
2 para resposta № 1Só quero fechar esta pergunta porque encontrei a solução. Atualizei-a acima.
1 para resposta № 2
Eu não acho que você pode obter um tamanho exato, poisexigiria o conhecimento das freqüências reais de várias strings em um arquivo, e você não pode fazer isso sem verificar o arquivo. Você pode ir para a função de descompressão real e fazer com que indique a que distância da entrada está (vs quão longe no saída é)?