Trabajar con ficheros Zip en VB.Net y C#
Publicado por maitetxu en 30th Abril 2007
A pesar de que la continuidad de J# está mas que cuestionada, todavía puede ser útil para varias cosas entre ellas comprimir archivos.
Desarrollando una aplicación Web en .Net hemos tenido la necesidad de comprimir varios archivos en un fichero Zip y enviarlos al cliente Web de forma transparente para el usuario.
Existen numerosas librerías para trabajar con ficheros Zip, pero encontramos una forma sencilla de trabajar con los ficheros Zip desde un programa VB.Net (también válido para C#). El Framework 1.1 de Microsoft (y también el 2.0) incorporan el lenguaje J# que es un “pariente de Java”, luego “java.util.zip” debe existir en algún lado. Si alguien se pregunta si existe en C# la respuesta es no ![]()
Efectivamente J# contiene “java.util.zip” y está dentro de “vjslib.dll”. Primero, nos aseguramos que tenemos en nuestro servidor/pc está librería, sino la tenéis podéis descargaros el “Paquete redistribuible de Microsoft Visual J# .NET versión 1.1” (o en inglés “Microsoft Visual J# .NET Version 1.1 Redistributable Package”) en esta dirección.
Añadiendo una referencia a la librería vjslib.dll en nuestro proyecto ya podemos utilizar las funciones que necesitamos para acceder a los ficheros zip como en el siguiente ejemplo:
Imports java.util
Imports java.util.zip
Imports java.io
‘ Función auxiliar que copia los bytes de un inputStream a un outputStream
Public Shared Sub CopyStream(ByVal inputStream _
As java.io.InputStream, _
ByRef outputStream As java.io.OutputStream)
Dim buffer(8192) As SByte
Dim got As Integer
got = inputStream.read(buffer, 0, buffer.Length)
While got > 0
outputStream.write(buffer, 0, got)
got = inputStream.read(buffer, 0, buffer.Length)
End While
outputStream.flush()
End Sub
Public Function createZip(ByVal zipPath As String, _
ByVal files2Zip As System.Collections.ArrayList) _
As Boolean
Dim zipOutputStream As zipOutputStream
Dim zipEntry As zipEntry
Dim fileInputStream As java.io.FileInputStream
Dim file2Zip As String
Dim auxObj As Object ‘ Esta variable contiene el valor que la
‘ función retornara
Dim created = True Try
‘ Crea el fichero zip
zipOutputStream = New _
zipOutputStream(New _
java.io.FileOutputStream(zipPath))
If Not files2Zip Is Nothing Then
For Each auxObj In files2Zip
file2Zip = CType(auxObj, String)
zipEntry = New _
zipEntry(System.IO.Path.GetFileName(file2Zip))
‘ Comprimimos los datos
zipEntry.setMethod(zipEntry.DEFLATED)
‘ Añadimos el fichero al zip
zipOutputStream.putNextEntry(zipEntry)
Try
fileInputStream = New _
java.io.FileInputStream (file2Zip)
Try
CopyStream(fileInputStream, _
zipOutputStream)
Finally
fileInputStream.close()
End Try
Catch e As Exception
created = False
Finally
zipOutputStream.closeEntry()
End Try
Next
End If
Catch e As Exception
created = False
Finally
If Not zipOutputStream Is Nothing Then
zipOutputStream.close()
End If
End TryReturn created
End Function

10th Mayo 2007 a las 15:15
[…] Trabajar con ficheros Zip en VB.Net y C# ——————————————————– Nos hemos mudado, puedes encontrar los últimos comentarios y correcciones al post en este enlace. […]
12th Julio 2008 a las 18:07
Quisiera hacer un comentario sobre este programa que me parece muy interesante, me podrian decir a donde se mudaron