Posted by: carloslone | February 12, 2008

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:

Diagrama de Clases DotNet Zip Library

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"

Creación de un nuevo proyecto

El segundo paso será agregar como referencia la dll que ustedes obtienen al bajar el último release del proyecto:

Agregando Referencia

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:

Codigo para crear archivo

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:

Archivo Zip de Salida

Si queremos hacer lo contrario para poder descomprimir archivos debemos de utilizar el siguiente método:

Extraccion de archivos

El Resultado es el siguiente:

Salida del programa

 

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:

Código en VB.NET
Código en C#

Saludos,

Carlos A. Lone

Etiquetas de Technorati: ,,,

Responses

  1. Saludos: Excelente muchas gracias por el material
    bytes

  2. Me ahorre varias horas de trabajo.

    Excelente artículo.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Categories

%d bloggers like this: