2010-02-10 20 views

Respuesta

8

Puede utilizar DotNetZip Library. Tiene funciones bastante ricas y útiles.


EDIT:

string[] MainDirs = Directory.GetDirectories(DirString); 

for (int i = 0; i < MainDirs.Length; i++) 
{ 
    using (ZipFile zip = new ZipFile()) 
    { 
     zip.UseUnicodeAsNecessary = true; 
     zip.AddDirectory(MainDirs[i]); 
     zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression; 
     zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G"); 
     zip.Save(string.Format("test{0}.zip", i)); 
    } 
} 
+0

Acabo de agregar un código de muestra a la respuesta, espero que no te importe . –

1

En mi trabajo anterior utilizamos #ziplib.

3

uso 7zip de comandos en C# ->LZMA SDK compatible con C#, y hay codesamples en el paquete

8

ver en el uso SharpZipLib. Es compatible con la compresión GZip y ZIP en C#.

Hay un excelente tutorial here que describe lo que necesita hacer para comprimir un directorio con SharpZipLib.

0

Este es un good discussion que analiza la posibilidad de hacer esto sin bibliotecas de terceros. Creo que deberías echarle un vistazo.

Aquí hay un large repository de ejemplos de códigos que pueden ayudarlo en su trabajo. Buena suerte ...

2

uso System.IO.Packaging Namespace que se introdujo con .NET Framework 3.5. Decidí usar que uno, porque se basa en las clases base de .NET Framework y no se requiere código de tercera parte que hace saltar el tamaño del código ..

here's otro post sobre Stackoverflow con respecto a esta pregunta

Y here's el espacio de nombres y ZipPackage declaración/explicación @MSDN

esperanza de que ayuda a

cristiano

0

GZip es parte de Microsoft Framework 2.0 onw ard. Se llama GZipStream en el espacio de nombres System.IO.Compression.

Para comprimir un directorio con esta clase, debe crear una clase serializable (por ejemplo, Directorio) que contiene una colección de Archivos.

La clase Files contendría file-name y file-stream para leer bytes del archivo. Una vez que aplique GZip en el Directorio, leerá los Archivos uno por uno y los escribirá en GZipStream.

Comprobar este enlace: http://www.vwd-cms.com/forum/forums.aspx?topic=18

0

Otra opción pre-3.5 es usar las utilidades zip de J #. Después de todo, a .Net no le importa en qué idioma se escribió originalmente el código ;-).

los artículos sobre cómo hacer esto:

0

La pregunta es bastante antiguo y también lo son las respuestas.

La mejor respuesta desde finales de 2012 es: Use .NET 4.5 y las System.IO.Compression y System.IO.Compression.ZipArchive clases de espacio de nombres.

Uno de los muchos enlaces que recibe ejemplo si se busca en internet: http://www.codeproject.com/Articles/381661/Creating-Zip-Files-Easily-in-NET

Desde 2014/2015 y siguientes .: Con Roslyn toda la biblioteca de marco fue publicado como código abierto, por lo AFA entenderlo, son libres de extraer el código de las clases 4.5 (ya que no debería ser realmente específico del sistema) y usarlo como una biblioteca para los frameworks .NET anteriores. Tal vez esto le daría algunas ventajas de licencia sobre el uso de otras clases, pero esto debe ser analizado por usted.

Cuestiones relacionadas