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:
- MSDN -> Open File
- MSDN -> GZipStream
- Visual Studio Microsoft
- Download Gratuiti per lo Sviluppo Software Microsoft
- Iprogrammatori.it