2008-12-17 27 views
26

¿Alguien sabe de una buena biblioteca de compresión de código abierto para .NET?biblioteca zip de código abierto para .NET?

+0

puede haber sido reformulado "Necesito generar archivos zip utilizando .NET. Pero carece de soporte .Net archivo zip. ¿Cómo podemos superar este problema?". Pero desde fx 4.5 esto se ve fijo a través de [System.IO.Compression.ZipArchive] (https://msdn.microsoft.com/en-us/library/system.io.compression.ziparchive (v = vs.110) .aspx) –

Respuesta

35

SharpZipLib

En cuanto a los comentarios y otros mensajes acerca de la implementación interna gzip, son no lo mismo! GZip no crea el encabezado requerido para archivar; solo es útil para "comprimir" un archivo o secuencia.

Los archivos zip adecuados contienen un encabezado que enumera todos los archivos comprimidos y en qué parte de los datos comprimidos se encuentran y, por lo tanto, necesita algo que haga un encabezado. Eso significa SharpZipLib, una de las muchas versiones comerciales o que usa algo externo con enlaces .NET como 7zip.

Por casualidad, alguien quiere decir esto: "¡Pero veo archivos .gz en Linux todo el tiempo!" - Son solo archivos únicos y .tar.gz no es una excepción - tar es el archivo de almacenamiento. El .gz es ese archivo comprimido.

+0

No necesita esto .NET tiene funcionalidad de compilación: vea la clase gzipstream. – AnthonyLambert

+0

gzipstream no es nada cerca zip-funcionalidad. –

+0

Creo que está demasiado atrapado con los archivos ... gzip es un formato de compresión general. – AnthonyLambert

9

Pruebe consultar 7-zip. Es de código abierto y mi programa zip favorito. muy kewl. aprovecha múltiples núcleos también.

.NET SDK está disponible here.

+0

Dude - 7 zip ES un programa de compresión. También es de código abierto ... entonces eso significa que es .NET ¿verdad? ==> Código fuente de C# para compresión y descompresión LZMA –

+2

+1, el SDK también es de dominio público, eso suena muy bien para mí. – Tuminoid

+1

Una advertencia: la implementación (segura) C# de 7-zip es mucho, mucho más lenta que la biblioteca no administrada, algo así como 10x (impresión privada, no comparativa puesto que la diferencia era tan grande). –

9

**** Pero chicos .NET ya soporta abierta postal de origen .... ****

http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx

Esto es compatible con las bibliotecas GZIP. Usé esto para comprimir datos de C# y descomprimir a través de la red en una aplicación de C++. Funciona bien.

, Tony

+0

¿cómo se compara la relación de compresión con 7-Zip? –

+0

Es lo mismo que gZIP. – AnthonyLambert

+0

el espacio de nombres system.io.compression no se ha abierto por completo, las cosas útiles están dentro del espacio de nombres microsoft.internal. En system.io.compression es solo la parte útil para crear pequeños archivos comprimidos, como los nuevos archivos de oficina, no los archivos zip reales. –

10

El DotNet Zip Library (Ionic.Zip.dll) es muy fácil de usar. Siento que es más fácil de implementar que SharpZip.

http://www.codeplex.com/DotNetZip

+0

No expande algunos de los archivos que SharpZipLib hace. –

+0

¿qué archivos no se expande? – Cheeso

+0

@Sergey - Sí, más detalles sobre la advertencia? – mlhDev

-1

también puede revisar la J # Redist. Reimplanta java.util.zip. Article

2

Eche un vistazo a here si quiere 7-zip con C#. Esta fue una pregunta en otra publicación en SO. Esto podría ayudarte.

25

Pareja de comentarios.

  1. No utilice el tiempo de ejecución J #. J # ha sido descontinuado por Microsoft. El apoyo futuro es cuestionable. Además, todo el tiempo de ejecución J # es una gran tuerca para tragar cuando lo único que quieres es soporte ZIP.
  2. El GzipStream en System.IO.Compression, que forma parte de la biblioteca de clases base .NET desde .NET 2.0, proporciona una interfaz de flujo para la compresión IETF RFC-1952. Está bien para la compresión, aunque la relación de compresión no es óptima y ampliará significativamente los datos que se han comprimido previamente. Esto bug was reported to Microsoft, but it's apparently been closed. También hay un DeflateStream que es similar, pero para RFC 1951. Existe una idea errónea de que GZipStream hace archivos zip. No es verdad. Ninguno de estos dos archivos zip.
  3. Hay System.IO.Packaging.ZipPackage.Funciona, pero está diseñado y pensado principalmente para el empaquetado de archivos de MS Office 2007 (.docx, .xslx y .pptx). Es difícil de manejar para los archivos zip y no es compatible con muchas funciones ZIP, como el cifrado.
  4. Si desea una forma flexible de crear y leer archivos zip en .NET, necesita una biblioteca de terceros, actualmente.

DotNetZip es una buena opción de terceros. Libre, de código abierto, mantenido activamente, fácil de usar, pequeño, buen conjunto de características. Se envía como un único ensamblaje: es un código completamente administrado. Funciona en Compact Framework y en .NET Framework. El prerrequisito es .NET 2.0.

DotNetZip también incluye una biblioteca ZLIB, con clases como {Zlib, GZip, Deflate} Stream. Son comparables a los incorporados a .NET, pero incluyen la capacidad de establecer niveles de compresión, y en niveles superiores se comprimen mucho más eficazmente que las clases integradas. El ZlibStream tiene compresión RFC 1950.

DotNetZip hace ZIP64, contraseñas, encriptación AES, transmisiones, SFX y Unicode. Todos los que lo usan dicen que es mucho más fácil de usar que SharpZipLib. Hay un buen archivo de ayuda (.chm) y muchos ejemplos de código.

DNZ CHM http://i27.tinypic.com/2nl8fwk.jpg

+0

¿Sabe usted que se puede incluir DotNetZip en un proyecto de código abierto? Escuché que Microsoft Public License no se puede usar junto con una GPL. – Zenya

+0

Primero, no soy un abogado de propiedad intelectual o un experto en licencias de software y su compatibilidad mutua. Sin embargo, estoy seguro de que puedo responder afirmativamente a su primera pregunta: DotNetZip puede usarse en un proyecto de código abierto. Hay una segunda pregunta implícita en su comentario: ¿Se puede usar una biblioteca autorizada bajo el MS-PL junto con un código o una biblioteca con licencia bajo la GPL? Esa es una pregunta completamente diferente, y no intentaré responderla. No estoy seguro, pero puede suponerse que "código abierto implica GPL". Esta no es una suposición válida. – Cheeso

+0

¡Gran biblioteca, gracias! – nrodic

Cuestiones relacionadas