Cómo comprimir y descomprimir archivos en vb.net

Publicado el 16 junio 2013 por Ferranmunoz @ferran_munoz

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:

  1. Se podría añadiendo un objeto de tipo “OpenFileDialog” para seleccionar los archivos a comprimir.
  2. 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).