Il framework 2.0 introduce il namespace System.IO.Compression il quale contiene classi per la compressione o decompressione di uno stream. Vediamo come sfruttarle per comprimere/decomprimere un file usando l'algoritmo GZip.
Imports System.IO
Imports system.IO.Compression
Public Class bcc_Compression
Public Shared Function Decomprimi(ByVal str_Origine As String, _
ByVal str_Destinazione As String) As Boolean
Try
Dim wf As FileStream
Dim rf As FileStream
Dim df As GZipStream
Dim buff(4096) As Byte
Dim int_Count As Int32
' stream per la lettura del file compresso
rf = New FileStream(str_Origine, FileMode.Open)
' stream per la scrittura del file decompresso
wf = New FileStream(str_Destinazione, FileMode.Create)
' stream per la decompressione, prende in input
' lo stream per la lettura del file str_Origine
df = New GZipStream(rf, CompressionMode.Decompress)
' ciclo per la lettura dei dati decompressi da df
int_Count = df.Read(buff, 0, buff.Length)
While int_Count > 0
' scrive il buffer sul file str_Destinazione
wf.Write(buff, 0, int_Count)
int_Count = df.Read(buff, 0, buff.Length)
End While
' chiude gli stream
df.Close()
rf.Close()
wf.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
Public Shared Function Comprimi(ByVal str_Origine As String, _
ByVal str_Destinazione As String) As Boolean
Try
Dim wf As FileStream
Dim cf As GZipStream
Dim buff() As Byte
' legge il file da comprimere in un buffer
buff = My.Computer.FileSystem.ReadAllBytes(str_Origine)
' apre uno stream per scrivere il file compresso
wf = New FileStream(str_Destinazione, FileMode.Create)
' compressione.. cf prende in input uno stream per la
' scrittura del file str_Destinazione
cf = New GZipStream(wf, CompressionMode.Compress)
cf.Write(buff, 0, buff.Length)
' chiude gli stream
cf.Close()
wf.Close()
Return True
Catch ex As Exception
Return False
End Try
End Function
End Class