Comprimiendo Múltiples Archivos en un Zip con .NET
Estimados Amig@s:
Es un gusto poder saludarlos nuevamente. Como ustedes sabrán hace algún tiempo escribí un artículo titulado "Comprimiendo Archivos en .net 2.0" el cual ha tenido bastante aceptación entre mis lectores. Una de las solicitudes que constantemente he recibido es la capacidad de poder generar un archivo zip con múltiples archivos. Como es de su conocimiento el namespace System.IO.Compression contiene la implementación para utilizar dos algoritmos de compresión de archivos: "deflate" y "Gzip", sin embargo comercialmente hablando existe infinidad de personas que utilizan el algoritmo "PkZip" es decir el comúnmente utilizado por Winzip. Bueno, para poder darle solución a esta situación existen dos alternativas, una un poco más compleja que la otra, la primera es utilizar "SharpZipLib" la cual la considero un poco más compleja y para este efecto les comparto un par de ejemplos tomados de otros sitios de como poder implementarlo:
Lo otra solución es el principal foco de este artículo y es la menos compleja y más efectiva. Sucede que System.IO.Compression no tiene incluido el algoritmo "PKzip", por lo que no podemos generar archivos ZIP desde las base class libraries de ese namespace, sin embargo gracias a la contribución "Dino Chiesa" del Blog de Interop, se inicio un nuevo proyecto para poder hacer realidad esta situación y este proyecto lo podemos encontrar hoy en día en CodePlex bajo el nombre "DotNet Zip Library". Esta librería esta basada en dos clases principales "ZipFile" y "ZipEntry" veamos a continuación su diagrama de clases:
Veamos a continuación como poder hacer la compresión de multiples archivos en un zip:
Primero voy a crear un proyecto en Visual Studio te tipo "Console"
El segundo paso será agregar como referencia la dll que ustedes obtienen al bajar el último release del proyecto:
Luego tenemos que importar el namespace en nuestro proyecto: Si estan en VB.NET "Imports Ionic.Utils.Zip" si estan en C# "using Ionic.Utils.Zip;" y proceder a crear su archivo de la siguiente manera:
Como podemos observar poder hacer la compresión de múltiples archivos se vuelve una tarea muy sencilla con esta librería, el resultado de esta operación es el siguiente:
Si queremos hacer lo contrario para poder descomprimir archivos debemos de utilizar el siguiente método:
El Resultado es el siguiente:
Como pueden ver esta librería puede ahorrarnos bastante trabajo al momento de trabajar con archivos Zip en nuestros programas. Espero que les halla servido y recuerden bajar la documentación de la librería y los ejemplos asociados. Para terminar les dejo links al código del projecto:
Saludos,
Carlos A. Lone