2009-02-02 12 views
6

De MSDN: DeflateStream ClassDeflateStream 4 GB de límite en .NET

DeflateStream no puede ser utilizado para comprimir archivos de más de 4 GB  .

¿Existen otras implementaciones para .NET sin el límite de 4   GB?

NOTA: Realmente necesito descomprimir un archivo en formato GZ con un contenido mayor que 4   GB. ¿Puede algún código hacer eso?

Respuesta

2

Eche un vistazo a SharpZipLib. No estoy seguro si está sujeto a la misma limitación, pero vale la pena echarle un vistazo.

1

Echando un vistazo, parece que muchas personas han encontrado este problema. System.IO.Compressio.DeflateStream clarifications please parece ser el más completo.

La única aplicación pude encontrar que parece superar este problema mediante el uso de Zip64 es Xceed Zip for .NET.

Sin embargo, es muy costoso y no estoy seguro si satisfaría sus necesidades.

Editar:

Hay que parecen ser un buen número de implementaciones de Zip64 para .NET, pero no puedo encontrar ninguna que están libres.

+0

Ese hilo externo no es útil. Está lleno de suposiciones y equivocadas. El DeflateStream no mantiene todos los datos de flujo en la memoria, esa no es la razón de la limitación de 4 gb. – Cheeso

+0

DotNetZip es una biblioteca .NET administrada para archivos ZIP, que hace ZIP64. Es gratis (gratis + libre), aunque se recomiendan donaciones. ZIP64 es una solución a un problema diferente al que se le preguntó al anunciante original: la limitación del BCL DeflateStream. – Cheeso

7

Hay sample code at CodeProject usando la biblioteca 7-Zip.

La licencia está abierta, por lo que debería poder utilizarla en su proyecto.

7-Zip también es compatible con archivos GZ.

+0

Votaría esto si me quedaban algunos votos, este parece uno bueno y mirando el registro de cambios tiene soporte para Zip64. –

+0

Mucho mejor que SharpZipLib (que es una fachada para zlib). 7zip es increíble. – RobS

1

Busque las bibliotecas que admiten DEFLATE64 (no Zip64, que es una extensión del formato de archivo ZIP). Xceed Zip for .NET admite Deflate64, y estoy seguro de que otros también lo hacen.

+0

Um, no. deflate64 no tiene nada que ver con el tamaño de los datos.Solo difiere del desinflado al proporcionar una ventana deslizante de 64K en lugar de una ventana deslizante de 32K. –

8

FYI, hemos eliminado el límite de 4 GB de DeflateStream en .NET 4.

+0

genial! Estoy esperando eso;) –

+0

Pero alguien como yo que está desinflando archivos comprimidos en SSIS no tiene suerte - Ustedes se saltaron la liberación de una nueva versión con vs2010/sql2008 r2 :( – Burg

0

DotNetZip hace ZIP64 para .NET, y está libre. Pero Zip64 no es lo mismo que Deflate64.

0

Aunque esa documentación dice que la limitación de 4 GB es tanto para DeflateStream como para GZipStream, solo GZipStream está limitado debido a la suma de comprobación CRC32. Si no necesita CRC32, use DeflateStream.

+0

Interesante. Preguntas para parejas. # 1: ¿Está usted seguro de esto? # 2. ¿Por qué el CRC32 limita el tamaño de los datos que se pueden comprimir? # 3. ¿Cuál es la fuente de su información? (¿Está familiarizado con la implementación de DeflateStream, o qué?) – Cheeso

+0

Hola, 1. Estoy absolutamente seguro - Lo he probado. 2. Ver Wikipedia: http://en.wikipedia.org/wiki/Cyclic_redundancy_check 3. Utilicé .NET Reflector (http: //www.red-gate .com/products/reflector /) para ver el código. La limitación de 4 GB se ignora por completo si no se usa CRC32. –

Cuestiones relacionadas