Deflatestream 4 GB Limite no .NET
-
21-08-2019 - |
Pergunta
De msdn: Classe Deflatestream
Deflatestream não pode ser usado para compactar arquivos maiores que 4 GB.
Existem outras implementações para .NET sem o limite de 4 GB?
Nota: Eu realmente preciso descomprimir um arquivo no formato GZ com conteúdo maior que 4 GB. Algum código pode fazer isso?
Solução
Dar uma olhada em Sharpziplib. Não tenho certeza se está sujeito à mesma limitação, mas vale a pena dar uma olhada.
Outras dicas
Para sua informação, removemos o limite de 4 GB do deflatestream no .NET 4.
Há Código de exemplo no CodeProject usando a biblioteca 7-ZIP.
A licença está aberta, para que você possa usar isso em seu projeto.
O 7-ZIP também suporta arquivos GZ.
Procure bibliotecas que suportem Deflate64 (não ZIP64, isso é uma extensão para o formato do arquivo zip). XECED ZIP para .NET Apoia o deflate64, e tenho certeza de que os outros também o fazem.
Dando uma olhada em volta, parece que muitas pessoas encontraram esse problema.System.io.compressio.deflatestream esclarecimentos, por favor parece ser o mais abrangente.
A única implementação que pude encontrar que parece superar esse problema usando o ZIP64 éXECED ZIP para .NET.
No entanto, é muito caro e não tenho certeza se isso seria aproveitado suas necessidades.
Editar:
Parece haver várias implementações do ZIP64 para .NET, mas não consigo encontrar nenhum que seja gratuito.
Dotnetzip Zip64 para .NET, e é gratuito. Mas o ZIP64 não é o mesmo que deflate64.
Embora essa documentação diga que a limitação de 4 GB é para a transmissão de deflatestream e GzipStream, apenas o GzipStream é limitado devido à soma de verificação do CRC32. Se você não precisar do CRC32, use o Deflatestream.