Hola Csharpedianos, tal vez se te ha presentado la necesidad de crear un archivo comprimido en zip desde c sharp y has tenido problemas con eso ya que hay mucha información en Internet y suele ser confusa en la mayoría de los caso. Es por eso que hoy les traigo este maravilloso post donde les mostrare como comprimir y descomprimir archivos desde C SHARP para luego descargarlos o hacer lo que se nos venga en gana con eso ;).
Para este fin utilizaremos una librería llamada Ionic.Zip.Dll que contiene los métodos para realizar la compresion y descompresión de los archivos.
Estos métodos al ser static pueden ser usados y llamados desde cualquier clase.
Estos método devolverán False en caso de que suceda algún error y no ejecute la acción esperada, en caso contrario revolverá True.
Estos serán los pasos:
- Crear un nuevo proyecto de ASP.NET - C SHARP en visual studio.
- Agregar la DLL Ionic.Zip.Dll que la pueden descargar Aquí.
Para esto pueden ver el post de como agregar la Dll Aquí. - Luego llaman el NamesPace:
using Ionic.Zip;
- Ahora utilizan el siguiente método para comprimir un archivo:
///
/// Método utilizado para comprimir archivos /// /// Ruta del folder que se desea comprimir. (Server.MapPath(...)) /// el nombre con el que se desea que se guarde el archivo generado. Sin la extension ///static public Boolean ComprimirFolder(string Ruta, string Nombre) { try { using (ZipFile zip = new ZipFile()) { zip.AddDirectory(Ruta); zip.Save(HttpContext.Current.Server.MapPath("temp/" + Nombre + ".zip")); } return true; } catch { return false; } }
El siguiente método utilicenlo para descomprimir los archivos:
///
/// Método utilizado para descomprimir los archivos de un zip file /// /// Ruta donde se encuentra el archivo ZIP /// Ruta donde se guardaran los archivos extraídos del ZIP ///static public Boolean DescromprimirZip(string ArchivoZip, string RutaGuardar) { try { using (ZipFile zip = ZipFile.Read(ArchivoZip)) { zip.ExtractAll(RutaGuardar); zip.Dispose(); } return true; } catch { return false; } }
Con el siguiente método pueden comprimir una lista de archivos específicos de una carpeta. Para este ejemplo solo tomare los archivos que sean .jpg o .jpeg:
///
/// Método para comprimir una lista de Imagenes, enviando solo la ruta donde se encuentran, no importa que no haya solo imagenes, el metodo le aplica un filtro. /// /// Ruta de donde se encuentran las imagenes. /// Ruta donde se guardara el archivo Zip ///static public Boolean ComprimirListaDeArchivos(string RutaDeArchivos, string RutaGuardar) { try { String[] NombreArchivos = Directory.GetFiles(RutaDeArchivos, "*.jp*"); using (ZipFile zip = new ZipFile()) { zip.AddFiles(NombreArchivos, ""); zip.Save(RutaGuardar); } return true; } catch { return false; } }
Les dejo el proyecto que utilice para estos ejemplos:
Descargar Aqui
Espero que lo disfruten, compartan y comenten. ;)
"Si se puede imaginar... se puede programar."