XperimentoS

Experiencias Profesionales…

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 Try
Return created
End Function

Post relacionados

  • 7Zip - Compresor de ficheros OpenSource mejor que el famoso winzip.
  • Obtener el número de serie del ordenador en Windows
  • Oracle y su framework opensource de persistencia
  • Copiar datos de Access a Excel de forma rápida
  • Mejorando la Macro de copiar tablas de Access a Excel
  • 2 Respuestas en “Trabajar con ficheros Zip en VB.Net y C#”

    1. Trabajar con ficheros Zip en VB.Net y C# « XperimentoS Dice:

      […] Trabajar con ficheros Zip en VB.Net y C# ——————————————————– Nos hemos mudado, puedes encontrar los últimos comentarios y correcciones al post en este enlace. […]

    2. Rodrigo Dice:

      Quisiera hacer un comentario sobre este programa que me parece muy interesante, me podrian decir a donde se mudaron

    Dejar un Comentario

    XHTML: Puedes usar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

     
    Cerrar
    Enviar por Correo