[2.0.] Descomprimir un fichero GZip

2011 vistas

Primero tendremos que añadir los Imports necesarios:



vbnet
  1. Imports System.IO
  2. Imports System.IO.Compression



Ahora crearemos una función que recibirá por parámetro el path completo del fichero a descomprimir y el path distino del archivo descomprimido.



vbnet
  1.     Public Function decompression(ByVal pathSource As String, ByVal pathDestination As String) As Boolean
  2.         ' pathSource: path completo del fichero a descomprimir
  3.         ' pathDestination: path completo del fichero final descomprimido
  4.  
  5.         Try
  6.             Dim myFileStream As New FileStream(pathSource, FileMode.Open)
  7.             Dim myGzipStream As New GZipStream(myFileStream, CompressionMode.Decompress)
  8.  
  9.             ' tabla que contendrá el tamaño del fichero
  10.             Dim tallaBytes(3) As Byte
  11.  
  12.             ' posicionamiento en el Stream para recuperar el tamaño
  13.             Dim position As Integer = CInt(myFileStream.Length - 4)
  14.             myFileStream.Position = position
  15.  
  16.             ' recuperamos el tamaño del fichero
  17.             myFileStream.Read(tallaBytes, 0, 4)
  18.  
  19.             ' nos posicionamos al inicio del Stream
  20.             myFileStream.Position = 0
  21.  
  22.             ' convertimos el tamaño del fichero a entero
  23.             Dim tallaFichero As Integer = BitConverter.ToInt32(tallaBytes, 0)
  24.             ' damos tamaño al buffer
  25.             Dim buffer(tallaFichero + 100) As Byte
  26.             Dim myOffset As Integer = 0
  27.  
  28.             While (True)
  29.                 ' los datos se descomprimen y se almacenan en el buffer
  30.                 Dim decompressionBytes As Integer = myGzipStream.Read(buffer, myOffset, 100)
  31.                 ' mientras queden datos continuamos
  32.                 If (decompressionBytes = 0) Then
  33.                     Exit While
  34.                 End If
  35.  
  36.                 ' incrementamos el offset para no empezar nuevamente de 0 cada vez...
  37.                 myOffset += decompressionBytes
  38.             End While
  39.  
  40.             ' creamos fichero descomprimido
  41.             myFileStream = New FileStream(pathDestination, FileMode.Create)
  42.             ' escribimos los datos descomprimidos al fichero
  43.             myFileStream.Write(buffer, 0, tallFichero - 1)
  44.  
  45.             ' quitamos los datos de memoria
  46.             myFileStream.Flush()
  47.  
  48.             ' cerramos Streams
  49.             myFileStream.Close()
  50.             myGzipStream.Close()
  51.  
  52.             Return True
  53.         Catch ex As Exception
  54.             MessageBox.Show(ex.Message)
  55.             Return False
  56.         End Try
  57.     End Function