Me puse manos a la obra y exploré las soluciones que se me ofrecían (la mayoría, de pago), pero, como todos sabemos, "... el que buscare, encontrará".
La solución que encontré se llama DotNetZip Library, y no es más que una librería y set de herramientas gratuito publicado por la comunidad de open source CodePlex, la cual se rige por la licencia Microsoft Public License.
Entonces, vamos a lo que nos interesa: ¿Cómo se comprime un archivo?
Con esta librería he encontrado que se hace de una forma muy simple; lo primero que necesitamos es bajarnos la librería DotNetZip, y luego, vamos a buscar dentro del zip que bajamos, el siguiente archivo: zip-v1.9\Release\Ionic.Zip.dll, el cual descomprimiremos en cualquier lugar de nuestro sistema.
Hecho esto, en Visual Studio hemos de crear un nuevo proyecto, nombrarlo como deseemos y hacer lo siguiente:
- Añadir una referencia a Ionic.Zip.dll: En el explorador del proyecto, click derecho y seleccionar la opción "Agregar referencia" o "Add reference" en el caso de que esté en inglés.
- Importar el namespace: Tecleamos en el area de imports de nuestro proyecto lo siguiente: Imports Ionic.Zip
Imports Ionic.Zip Private Sub Comprimir() Using zip As ZipFile = New ZipFile() zip.AddFile("rutaarchivo\nombrearchivo1.ext","") zip.AddFile("rutaarchivo\nombrearchivo2.ext","") zip.Save("rutazip\nombrezip.zip") End Using End Sub
Como podrán ver, la forma de hacerlo es muy sencilla, simplemente se utiliza el método "AddFile" del objeto zip de tipo ZipFile para añadir cuantos archivos necesitemos comprimir, y luego se guarda el Zip con el método "Save"; ahora bien, podemos observar que AddFile tiene un segundo parámetro el cual es un string en blanco. ¿Qué siginifica? Pues, simplemente es una ruta que se utilizará dentro del ZIP; por ejemplo, si la instrucción fuera:
zip.AddFile("rutaarchivo\nombrearchivo.ext","test\")
entonces, al abrir el zip resultante, tendríamos primero una carpeta llamada "test" dentro de la cual estaría almacenado el archivo.
Por lo tanto, como el segundo parámetro es una cadena vacía, se le indica a la clase que quiere que no haya ninguna estructura de directorios dentro del Zip, simplemente el archivo en cuestión; por defecto, si no se especifica este parámetro, el método creará la estructura de directorios original del archivo dentro del ZIP.
Para más información de cómo utilizar esta librería, pueden visitar su documentación oficial (en inglés), donde podrán encontrar la referencia de los espacios de nombres, clases, etc. y una sección con bastantes ejemplos (como comprimir de forma simple o incluso agregando una contraseña, descomprimir, etc.) en cada lenguaje con el que se puede utilizar.
Espero les sea de utilidad esta información.
Saludos.