Decompressione File in formato gZip – Codice VB.NET

Decompressione file in formato gZIP: come fare a gestire la decompressione di file gZip in un qualsiasi file, direttamente da codice VB.NET, senza librerie esterne.

Introduzione

Il listato seguente permette di effettuare la decompressione file zip, anche creati da altra applicazione di compressione/decompressione. Per il programmatore potrebbe essere molto utile avere il codice già pronto e tale da gestire la decompressione file gzip. La funzione che si occupa del tutto è: IngAC_FILE_gZIP_DECOMPRESSIONE(ByVal File_Origine As String, ByVal File_Destinazione As String) As Boolean. Grazie ad essa saremo in grado di ricavare il file originale da un qualsiasi file zippato con pochi passaggi.

Imports System.IO
Imports System.IO.Compression

Public Function IngAC_FILE_gZIP_DECOMPRESSIONE(ByVal File_Origine As String, ByVal File_Destinazione As String) As Boolean
        IngAC_FILE_gZIP_DECOMPRESSIONE = False
        'controllo che il file esista, altrimenti termina
        'restituendo FALSE
        If File.Exists(File_Origine) = False Then
            Return False
        End If
        'Creazione stream dei file
        Dim Stream_F_Origine As FileStream = Nothing
        Dim Stream_F_Destinazione As FileStream = Nothing
        Dim Zip_File As GZipStream = Nothing
        Dim Dati As Byte() = Nothing
        Try
            'lettura file da decomprimere
            Stream_F_Origine = New FileStream(File_Origine, FileMode.Open)
            'Creazione oggetto per decompressione
            Zip_File = New GZipStream(Stream_F_Origine, CompressionMode.Decompress, True)
            'Dimensioni del byte
            Dati = New Byte(4) {}
            Dim posizione As Integer = CType(Stream_F_Origine.Length, Integer) - 4
            Stream_F_Origine.Position = posizione
            Stream_F_Origine.Read(Dati, 0, 4)
            Stream_F_Origine.Position = 0
            Dim dimensione As Integer = BitConverter.ToInt32(Dati, 0)
            Dim buffer(dimensione + 256) As Byte
            Dim offset As Integer = 0
            Dim total As Integer = 0
            'lettura file compresso
            While True
                Dim bytesRead As Integer = Zip_File.Read(buffer, offset, 256)
                If bytesRead = 0 Then
                    Exit While
                End If
                offset += bytesRead
                total += bytesRead
            End While
            'Scrittura file
            Stream_F_Destinazione = New FileStream(File_Destinazione, FileMode.Create)
            Stream_F_Destinazione.Write(buffer, 0, total)
            'Libera il buffer
            Stream_F_Destinazione.Flush()
        Catch ex As Exception
            'Restituisce FALSE
            IngAC_FILE_ZIP_gDECOMPRESSIONE = False
            MsgBox("Errore: " & ex.Message)
        Finally
            'Chiusura stream
            If Not (Stream_F_Origine Is Nothing) Then
                Stream_F_Origine.Close()
            End If
            If Not (Zip_File Is Nothing) Then
                Zip_File.Close()
            End If
            If Not (Stream_F_Destinazione Is Nothing) Then
                Stream_F_Destinazione.Close()
            End If
            IngAC_FILE_gZIP_DECOMPRESSIONE = True
        End Try
    End Function

Come funziona la decompressione file gzip da codice VB.NET

La funzione IngAC_FILE_gZIP_DECOMPRESSIONE ha come input:

  • File_Origine che è il file che si vuole decomprimere, che ha qualsiasi estensione, ma il contenuto deve essere zippato.
  • File_Destinazione che invece è il percorso e il nome del file decompresso che si vuole ottenere.

Come output si avrà la creazione del file nella posizione desiderata; la funzione restituisce TRUE se è tutto ok, FALSE se qualcosa è andato storto.

Il funzionamento è commentato direttamente nel codice. Infine, ricordate di inserire Imports System.IO e Imports System.IO.Compression per poter usare la funzioneIngAC_FILE_gZIP_DECOMPRESSIONE.

Link utili:

You may also like...