[.net2] compression/décompression gzip de fichier grâce à io.compression

Soyez le premier à donner votre avis sur cette source.

Vue 11 778 fois - Téléchargée 668 fois


Description

Un tout petit sample de la classe incroyablement pratique Io.Compression, permettant de compresser et de décompresser des fichiers à l'aide d'un algo puissant, et ce très rapidement. (aussi bien coté code que coté éxecution).
Merci le framework 2 !

Source / Exemple :


Imports System.IO
Imports System.IO.Compression

Public Class HbGzip

    Public Shared Function Compress(ByVal cheminSource As String, ByVal cheminCible As String) As String
        Try
            Dim hbread As New BinaryReader(File.OpenRead(cheminSource))
            Dim F_array(hbread.BaseStream.Length) As Byte
            hbread.BaseStream.Seek(0, SeekOrigin.Begin)
            hbread.BaseStream.Read(F_array, 0, F_array.Length)
            hbread.BaseStream.Flush()
            hbread.Close()
            Dim tmpstream As FileStream = New FileStream(cheminCible, FileMode.OpenOrCreate)
            Dim gzipper As GZipStream = New GZipStream(tmpstream, CompressionMode.Compress)
            gzipper.Write(F_array, 0, F_array.Length)
            gzipper.Flush()
            gzipper.Close()
            Return "compression effectuée avec succés"
        Catch ex As Exception
            Return ex.ToString
        End Try
    End Function

    Public Shared Function Decompress(ByVal cheminSource As String, ByVal cheminCible As String) As String
        Try
            Dim bufferLen As Integer = 1024
            Dim hbread As New BinaryReader(File.OpenRead(cheminSource))
            Dim gzipper As GZipStream = New GZipStream(hbread.BaseStream, CompressionMode.Decompress)
            Dim hbwrite As New BinaryWriter(File.OpenWrite(cheminCible))
            Dim F_array(bufferLen) As Byte
            Dim readlen As Integer
            Dim flag As Boolean = True
            Do
                readlen = gzipper.Read(F_array, 0, F_array.Length)
                If readlen > 0 Then
                    flag = True
                    If readlen = (bufferLen + 1) Then hbwrite.Write(F_array, 0, readlen) Else hbwrite.Write(F_array, 0, readlen - 1)
                Else
                    flag = False
                End If
            Loop While (flag)
            hbwrite.Close()
            gzipper.Close()
            Return "decompression effectuée avec succés"
        Catch ex As Exception
            Return ex.ToString
        End Try
    End Function
End Class

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

TroXsA
Messages postés
553
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
2 octobre 2016
1 -
Pas mal mais tres ressemblant a l'exemple du MSDN !
par la meme occasion je ferais une remarque a monsieur Microsoft on sais jamais qu'il passerais par la :)
pourquoi ne pas avoir fait une class dans le framework 2 Compression/Decompression ? !
sa aurait ete plus simple enfin bon c'est qu'un avis perso :)

Juste parazarre tu aurais le Snippet qui va avec ?
Merci et bonne continuation !

troxsa.info
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1 -
hmm salut et merci pour ton commentaire.
la ressemblance avec l'exemple de microsoft est etonnante, à part si tu parles seulement des namespace utilisés lol... car c'est resultat de tattonement, et ce à partir de mon sample d'accés binaire présent ici... surtout la decompression, dont l'algo est je pense, à revoir. Peux tu me filer l'url?

Et je comprend pas ce que tu entend pas snippet, j'ai également fait une petite recherche, et j'ai survolé un article mais n'ai pas compris l'interet de ces snippets... je croyais que c'etait juste le fait d'etre un bout de code moi...
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1 -
ah ouais je viens de capter pour les snippets, mais tu veux quoi? le xml entier generé?
merci c2i (http://www.c2i.fr/code.aspx?IDCode=609)
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1 -
j'adore les contributions sans suite... ^^
mumuxe
Messages postés
2
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
26 septembre 2009
-
Un bon code, très clair et bien rédigé. Pourtant, j'ai un petit problème. Lorsque je compresse un ficher, il en ressort ... plus GROS !!! Par exemple, pour un ficher texte de 24 octès à l'entrée, il y ressort avec 148 octès. Si quelqu'un pourrais m'expliquer et surtout apporter une solution au problème, ça serait gentil.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.