Seguramente muchos programadores tenéis la necesidad de comprimir y descomprimir archivos desde Debido un proyecto que estoy haciendo tenía la necesidad de una librería para comprimir y descomprimir archivos que estaban en .zip
Afortunadamente, la clase está en dominio publico, con lo que solo tienes que descargarla y referenciar la clase en tu proyecto. La solución la he encontrado en la clase que nos ofrece la libreria dotnetzip. Gracias a esta librería, podremos comprimir y descomprimir archivos con una sintaxis muy fácil de entender. Ahora os escribo el código para que nadie se pierda.
Referenciando el archivo
Una vez descomprimido el paquete que nos descargamos (desde nuestro servidor), nos aparecerán varias carpetas.
Nosotros solamente necesitaremos referenciar a nuestro proyecto la librería que está dentro de la siguiente ruta: “DotNetZipLib v1.9 –> zip-v1.9 –> Debug“. La librería a referenciar es la “Ionic.Zip.dll”
Una vez localizado el archivo, vamos a referenciar el archivo desde el proyecto. Apretamos el botón derecho encima del proyecto y pulsamos “Agregar referencia”:
Más tarde, vamos a la pestaña “Examinar” y seleccionamos la librería “Ionic.Zip.dll”
Y, finalmente, desde el código fuente, vamos a importar la librería para poder utilizar sus métodos.
Descomprimir un archivo
Para descomprimir un archivo, en el ejemplo usaré un procedimiento Sub que se llamará “Extraer”. Os pego el código:
1 2 3 4 5 6 7 8 9 10
Private Sub Extraer() Dim ZipAExtraer As String = "ArchivoZipAExtraer" Dim DirectorioExtraccion As String = "CarpetaDondeIraElArchivoExtraido" Using zip1 As ZipFile = ZipFileRead(ZipAExtraer) Dim e As ZipEntry For Each e In zip1 eExtract(DirectorioExtraccion, ExtractExistingFileActionOverwriteSilently) Next End Using End Sub
Vamos a explicar cada variable que declaramos:
- ZipAExtraer: Variable de tipo “String” donde pondremos la ruta para el archivo a extraer
- DirectorioExtraccion: Variable de tipo “String” donde pondremos la ruta donde irá el archivo extraído.
- zip1: Variable de tipo “ZipFile” (está incluido en la clase ionic.zip.dll que hemos referenciado) que le dirá al procedimiento que archivo tiene que leer y cual es el contenido a extraer.
Una vez con la ruta de entrada (Guardada en la variable ZipAExtraer), la ruta de salida (Guardada en la variable DirectorioExtraccion) y diciéndole que lo extraiga (gracias a la variable zip1), la función ya está lista para su uso.
Comprimir un archivo
Ahora realizaremos el procedimiento a la inversa, en que seleccionaremos unos cuantos archivos y los comprimiremos en un archivo .zip.
Esta vez el ejemplo que he realizado muestra un procedimiento Sub que se llamará “Comprimir”. Os pego el código:
1 2 3 4 5 6 7 8
Private Sub Comprimir() Using zip As ZipFile = New ZipFile() zipAddFile("Archivo1") zipAddFile("Archivo2") zipAddFile("Archivo3") zipSave("Miarchivozip.zip") End Using End Sub
Esta vez el código es muchísimo más sencillo. Lo que hace este procedimiento es declarar una variable llamada “zip” de tipo “ZipFile” (incluido en la clase ionic.zip.dll) y, una vez declarada, usaremos el método “AddFile” para ir añadiendo los archivos que queramos incluir en el Zip.
Es por eso que, en donde dice “Archivo1″, “Archivo2″, etc…. tenemos que pegar la ruta donde tenemos el archivo a comprimir.
Finalmente, una vez con todos los archivos, se utiliza el método “Save” para guardar el archivo comprimido en .zip.
Lo básico
Ahora os he mostrado lo básico, pero el único límite que tiene el programador es la imaginación. Os pongo algunas cosas que se podrían poner en el programa para mejorar la experiencia del usuario:
- Se podría añadiendo un objeto de tipo “OpenFileDialog” para seleccionar los archivos a comprimir.
- Se podría añadir un objeto de tipo “ProgressBar” (Barra de progreso) para mostrar el progreso de compresión/descompresión.
Ahora mismo el problema está en que tienes que poner la ruta de los archivos a mano, cosa totalmente molesta para el programador. Pero bueno… lo dicho, ahora mismo la clase hace lo básico (comprimir y descomprimir).