DotNetMania@GT

Blog Personal de Carlos Lone

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: ,,,
Published Tuesday, February 12, 2008 8:49 AM by carlone
Filed under: ,

Comments

# Comprimiendo M??ltiples Archivos en un Zip con .NET « Blog de Jos?? R. Guay@ Wednesday, February 13, 2008 10:35 AM

Pingback from  Comprimiendo M??ltiples Archivos en un Zip con .NET « Blog de Jos?? R. Guay

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Friday, February 22, 2008 11:55 AM

Existe alguna forma de insertarle algun tipo de seguridad como una contraseña al archivo zip?

by Edgar Rivas

# Some uses of the Ionic DotNetZip library@ Thursday, June 19, 2008 9:16 PM

ASP.NET App that compresses a file as it is uploaded professionalaspnet.com/.../Compressing-a-File-as-it-is-Uploaded.aspx

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Friday, December 05, 2008 12:34 PM

necesito el codigo para programar un compresor y descompresor de archivos en C#

by oniel

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Wednesday, February 04, 2009 12:24 PM

Hola, esta muy interesante. Pero hay alguna forma de agregarle contraseña al archivo de salida? y descomprimir con contraseña. grasias.

by marcos

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Sunday, April 05, 2009 4:39 PM

hay alguna manera de comprimir carpetas ?

by alex

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Monday, April 13, 2009 10:45 AM

Esta libreria me sirve para descomprimir streams en lugar de archivos y en C++ en lugar de C# o VB??

by marcos

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Friday, April 17, 2009 12:14 PM

En la instruccion zip.save() me dice "acceso denegado a la ruta de acceso".... agradezco de antemano su colaboracion

by JIm Ortega

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Sunday, April 19, 2009 12:56 PM

Jim, si la instruccion save te da error al momento de grabar es por que el usuario con el que se esta ejecutando el contexto de la aplicación no tiene autoridad para escribir en esa ruta. Me atrevería a pensar que tu caso es una aplicación web, y normalmente en este tipo de aplicaciones dentro del iis el contexto de la aplicación se ejecuta bajo el usuario ASP.NET, habría que verificar si este usuario tiene autoridad en este directorio para grabar la información.

by carlone

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Thursday, June 04, 2009 5:10 AM

Hola. Yo tengo el mismo problema cuando hago zip.save(). pero yo genere archivos .xls en esa ruta y si los genera, entonces no es de permisos de escritura pues los tiene.

Obviamente enmi máquina local, la generación del .zip me funciona pero cuando lo pase al servidor ya no funciona.

Alguien puede ayudarme?

Gracias

by Marcela

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Thursday, June 11, 2009 8:55 PM

Marcela, el problema que estas teniendo para guardar el archivo al ejecutarlo desde una aplicación asp.net, necesita de un pequeño paso más.

Existe una propiedad llamada "TempFileFolder", que es el directorio que utiliza la libreria para generar temporalmente el archivo que utilizas, asignale a esta propiedad la carpeta donde hay permisos de escritura y lectura.

Con este cambio deberia de funcionarte.

Cualquier cosa estoy a la orden.

Saludos,

by carlone

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Sunday, August 02, 2009 8:56 PM

Hola a todos,

Por favor consideren mi articulo en codeplex:

zipstorer.codeplex.com

Provee una libreria para comprimir y descomprimir archivos zip con una implementacion minimalista.

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Friday, January 15, 2010 12:39 PM

Excelente de mucha ayuda!!!!! Felicidades

by Carlos Espinoza

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Thursday, January 28, 2010 1:14 PM

Hola necesito saber como hago para poder agregarle una contraseña al archivo gracias

by Sharel

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Thursday, January 28, 2010 8:11 PM

Hola tengo un problema que me da cuando comprimo desde aspx y me dice cuando llega a zip.save() es que el acceso denegado en c>\windows\system32\inetsrv\...  que puedo hacer ayuda por favor

by Laura

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Wednesday, February 03, 2010 10:52 AM

Esta es una apliacion web, como hago para comprimir en el cliente. La finalidad es que la tranferencia de archivos sea mas rapida desde la pagina web al servidor.

by Jonatan

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Monday, January 10, 2011 4:26 PM

buenos dias gente yo soy nuevo en esto pero tengo el mismo problema que Laura por favor si alguien me puede ayudar.

by Elmer

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Monday, January 31, 2011 12:15 PM

Muchas gracias por compartir !

Saludos!

by Sebastián

# Ayuda para descargar un archivo en VB 2008. - Foros de CHW@ Saturday, February 05, 2011 6:29 PM

Pingback from  Ayuda para descargar un archivo en VB 2008. - Foros de CHW

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Monday, February 14, 2011 11:05 AM

El problema de Laura, alguien pudo solucionarlo??

esq tengo el mismo :(

gracias,

by Andre Haro

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Wednesday, May 25, 2011 1:47 PM

Quisiera saber si hay alguna forma de que al momento de agregar un único archivo, no agregue toda la ruta?

by Marko

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Tuesday, May 31, 2011 10:13 AM

Comprimiendo m 250 ltiples archivos en un zip con net.. Outstanding :)

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Thursday, September 22, 2011 4:23 PM

muy buen artuculo!!! graciaaaaaaaaas me sirvio de mucho =)

by Anahi

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Friday, September 30, 2011 12:42 PM

Excelente aporte.

Se agradece

by Miguel Chileno

# re: Comprimiendo Múltiples Archivos en un Zip con .NET@ Wednesday, January 11, 2012 3:49 PM

acceso denegado en c>\windows\system32\inetsrv\...  que puedo hacer ayuda por favor

by juan

# Limites Trigonometricos Ejemplos@ Saturday, January 14, 2012 10:46 AM

Pingback from  Limites Trigonometricos Ejemplos

Leave a Comment

(required) 
(required) 
(optional)
(required)