2010-03-23 12 views
12

Quiero comprimir un directorio completo que puede tener cualquier cantidad de subdirectorios en un solo archivo ZIP.Cómo comprimir un directorio en un archivo comprimido programáticamente

Soy capaz de comprimir un solo archivo en un archivo zip programáticamente.

Para comprimir un directorio completo, puedo pensar en un programa recursivo que recorre cada subdirectorio y lo comprime.

Pero, ¿hay alguna manera simple de comprimir toda la carpeta utilizando el mismo código, sin tener que escribir ninguna función recursiva?

Respuesta

17

Usando DotNetZip, hay una addDirectory() método en la clase ZipFile que hace lo que desea:

using (var zip = new Ionic.Zip.ZipFile()) 
{ 
    zip.AddDirectory("DirectoryOnDisk", "rootInZipFile"); 
    zip.Save("MyFile.zip"); 
} 

Este ejemplo, y muchos otros, son available on codeplex.

+0

DotNetZip no es para producción. Contiene algunos errores cruciales. Ya me olvido de cuál exactamente, pero he concluido una vez después de largas investigaciones que en el estado actual es absolutamente poco confiable. – SerG

5
ZipFile.CreateFromDirectory(<path of folder you need to zip>, <path of zip file with .zip in the end>, CompressionLevel.Fastest, true); 
+0

Teniendo en cuenta que 'DotNetZip' y' SharpZipLib' son ambos abandonware, una solución real de .NET es ideal. – TEK

+1

Nunca puedo recordar la sintaxis para esto. No olvide agregar una referencia a System.IO.Compression.FileSystem y una instrucción using para System.IO.Compression. – Scott

Cuestiones relacionadas