[2.0.] Descomprimir un fichero GZip
Artículo por Club Developers · 11 mayo 2006
2100 vistas
Primero tendremos que añadir los Imports necesarios:
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
Imports System.IO 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
Public Function decompression(ByVal pathSource As String, ByVal pathDestination As String) As Boolean ' pathSource: path completo del fichero a descomprimir ' pathDestination: path completo del fichero final descomprimido Try Dim myFileStream As New FileStream(pathSource, FileMode.Open) Dim myGzipStream As New GZipStream(myFileStream, CompressionMode.Decompress) ' tabla que contendrá el tamaño del fichero Dim tallaBytes(3) As Byte ' posicionamiento en el Stream para recuperar el tamaño Dim position As Integer = CInt(myFileStream.Length - 4) myFileStream.Position = position ' recuperamos el tamaño del fichero myFileStream.Read(tallaBytes, 0, 4) ' nos posicionamos al inicio del Stream myFileStream.Position = 0 ' convertimos el tamaño del fichero a entero Dim tallaFichero As Integer = BitConverter.ToInt32(tallaBytes, 0) ' damos tamaño al buffer Dim buffer(tallaFichero + 100) As Byte Dim myOffset As Integer = 0 While (True) ' los datos se descomprimen y se almacenan en el buffer Dim decompressionBytes As Integer = myGzipStream.Read(buffer, myOffset, 100) ' mientras queden datos continuamos If (decompressionBytes = 0) Then Exit While End If ' incrementamos el offset para no empezar nuevamente de 0 cada vez... myOffset += decompressionBytes End While ' creamos fichero descomprimido myFileStream = New FileStream(pathDestination, FileMode.Create) ' escribimos los datos descomprimidos al fichero myFileStream.Write(buffer, 0, tallFichero - 1) ' quitamos los datos de memoria myFileStream.Flush() ' cerramos Streams Return True Catch ex As Exception MessageBox.Show(ex.Message) Return False End Try End Function