sabato 1 dicembre 2007

vb.net 2.0 comprimere e decomprimere file

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