Imports System.IO Imports System.IO.Compression
Public Function decompression(ByVal cheminSource As String, ByVal cheminDestination As String) As Boolean ' cheminSource : chemin complet du fichier compressé ' cheminDestination : chemin complet du fichier où le fichier doit être décompressé 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 MessageBox.Show(ex.Message) Return False End Try End Function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questiondecompression("d:\a.zip", "d:")