1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
Public Function decompression(ByVal cheminSource As String, ByVal cheminDestination As String) As Boolean
Try
'Lecture du fichier compresse
Dim monFileStream As New FileStream(cheminSource, FileMode.Open)
' Données du fichier placées dans un GZipStream
Dim monGzipStream As New GZipStream(monFileStream, CompressionMode.Decompress)
' Tableau qui va contenir la taille du fichier
Dim tailleOctets(3) As Byte
' Positionnement dans le Stream pour récupérer la taille
Dim position As Integer = CInt(monFileStream.Length - 4)
monFileStream.Position = position
' Récupération de la taille du fichier
monFileStream.Read(tailleOctets, 0, 4)
' Repositionnement en début du Stream
monFileStream.Position = 0
' Conversion de la taille du fichier en entier
Dim tailleFichier As Integer = BitConverter.ToInt32(tailleOctets, 0)
' Dimesionnement du buffer
Dim buffer(tailleFichier + 100) As Byte
' Offset qui permettra de se repérer dans le Stream
Dim monOffset As Integer = 0
While (True)
' Les données sont décompressées et placées dans le buffer
Dim decompressionOctets As Integer = monGzipStream.Read(buffer, monOffset, 100)
' Tant qu'il reste des données on continue
If (decompressionOctets = 0) Then
Exit While
End If
' On icrémente l'offset pour ne pas repartir de 0 à chaque fois...
monOffset += decompressionOctets
End While
' Création du fichier décompressé
monFileStream = New FileStream(cheminDestination, FileMode.Create)
' Ecriture des données décomrpessées dans le fichier
monFileStream.Write(buffer, 0, tailleFichier - 1)
' Efface les données en mémoire tampon
monFileStream.Flush()
' Fermeture des Streams
monFileStream.Close()
monGzipStream.Close()
Return True
Catch ex As Exception
Return False
MsgBox(ex.Message)
End Try
End Function |
Partager