Décompresser en .net plusieurs formats populaires d'archivage (rar, zip, cab, 7z, gzip, tar, etc...)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 395 fois - Téléchargée 20 fois

Contenu du snippet

Ce code permet de décompresser beaucoup des formats d'archivage RAR, ZIP, CAB, GZIP, BZIP2, TAR, 7z et la liste n'est pas complète.

Ce code est destiné à faire une décompression en arrière plan, donc il ne ne passe rien à l'écran.

J'utilise deux programmes en ligne de commande : UnRar et 7-Zip.
Ils sont tout les gratuits et libre d'utilisation.

On peut les télécharger aux adresses suivante :
http://www.rarsoft.com/rar_add.htm
http://www.spiroo.be/7zip/download.html
Attention de bien choisir la version "command line" ou "ligne de commande"

Source / Exemple :


Private Function Decompresser(ByVal FileName As String, ByVal ExtractDir As String) As Boolean
        Select Case UCase(Mid(FileName, Len(FileName) - 2))
            Case "RAR"
                Return UnRar(FileName, ExtractDir)
            Case Else
                Return UnCompress(FileName, ExtractDir)
        End Select
    End Function

Private Function UnRar(ByVal FileName As String, ByVal ExtractDir As String) As Boolean
   Dim Success As Boolean = False
   Dim CodeDeSorti As Integer

        Try
            Dim proc As New Process()
            With proc
                With .StartInfo
                    .UseShellExecute = False
#If DEBUG Then
                    .FileName = "C:\LeCheminOuJaiTelechargerCeProgramme\UnRaR.exe"
#Else
                    .FileName = My.Application.Info.DirectoryPath & "\UnRaR.exe"
#End If
                    .Arguments = " x -ibck -inul -or -y " & " """ & FileName & """  """ & ExtractDir & """"
                    'x          Extraire des fichiers d'une archive, en tenant compte de leurs chemins complets 
                    '-inul      Désactive les messages d'erreur 
                    '-or        Renommer les fichiers automatiquement 
                    '-y         Considère toutes les réponses aux questions comme "Oui" 
                    '-p[mdp]    Utilise un mot de passe 
                    .WorkingDirectory = ExtractDir
                    .WindowStyle = ProcessWindowStyle.Hidden
                    .CreateNoWindow = True
                End With
                .Start()
                .WaitForExit()
                CodeDeSorti = .ExitCode
                .Close()
            End With
        If CodeDeSorti < 2 Then '0 Opération réussie. 1 Avertissement. Une erreur non fatale s'est produite. 
            Success = True
        End If
        Catch ex As Exception
        End Try

        Return Success
    End Function

    Private Function UnCompress(ByVal FileName As String, ByVal ExtractDir As String) As Boolean
        Dim SevenZip As String
        Dim CodeDeSorti As Integer
        Dim Success As Boolean = False

        Try
            Dim proc As New Process()

#If DEBUG Then
            SevenZip = "C:\LeCheminOuJaiTelechargerCeProgramme\7za.exe"
#Else
            SevenZip = My.Application.Info.DirectoryPath & "\7za.exe"
#End If
            With proc
                With .StartInfo
                    .UseShellExecute = False
                    .FileName = SevenZip
                    .WorkingDirectory = ExtractDir
                    .Arguments = " x -aou -y """ & FileName & """  -w""" & ExtractDir & """"
                    'x          Extrait des fichiers d'une archive, en tenant compte de leurs chemins complets 
                    '-w...      Spécifie le dossier dans lequel les fichiers extraits doivent être placés 
                    '-aou       Renomme les fichiers automatiquement les fichiers extrait
                    '-y         Considère toutes les réponses aux questions comme "Oui" 
                    '-p...      Utilise un mot de passe 
                    .WindowStyle = ProcessWindowStyle.Hidden
                    .CreateNoWindow = True
                End With
                .Start()
                .WaitForExit()
                CodeDeSorti = .ExitCode
                .Close()
            End With
            If CodeDeSorti < 2 Then '0 Opération réussie. 1 Avertissement. Une erreur non fatale s'est produite. 
                Success = True
            End If

        Catch ex As Exception
        End Try

        Return Success
    End Function

Conclusion :


Pour faire fonctionner ce code vous devez copier unrar.exe et 7za.exe dans le même répertoire que votre programme et remplacer "C:\LeCheminOuJaiTelechargerCeProgramme\" par le bon répertoire pour pouvoir tester l'application en mode débogage.
Le paramètre "ExtractDir" doit contenir un chemin se terminant par "\" .

Voici comment utiliser la fonction.
Dim Success As Boolean = Decompresser("C:\MonChemin\MonArchive.rar", "C:\UnAutreChemin\")

J'avais commencé ce code avec WinRar mais c'est un shareware et pas un freeware. L'avantage était de pouvoir décompresser encore plus de format qu'aujourd'hui, l'exécution était plus rapide et le code était plus court. Mais bon, les droits d'auteur d'abord...

Dans quelques jours une mise à jour sera faite pour la gestion des mots de passe.

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
c'est plutot "Lancer en .Net des logiciels tiers (décompression, par exemple)"
NikatorS
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011
-
C'est bien, en effet, la MÉTHODE que j'utilise mais ce n'est pas le BUT. Avant de faire ce code, j'ai vu beaucoup de programme utilisant une DLL pour décompresser mais jamais personne n'a dit que son application montrer comment utiliser une DLL.

Si j'avais voulu faire un exemple en .NET pour lancer un logiciel tiers (ce qui est une très bonne idée en passant) j'aurai utilisé un programme connu de tous le monde, genre notepad. J'aurai également afficher ce programme. Là, rien ne se passe à l'écran.
cs_bigboss9
Messages postés
162
Date d'inscription
jeudi 22 janvier 2004
Statut
Membre
Dernière intervention
20 juillet 2013
-
La question n'est pas de savoir si cela a un but. C'est un code, et non une application que tu nous proposes et en tant que code, ce qu'il fait à termes n'est pas important, c'est la façon dont il le fait.

La seule chose que l'on voit, c'est que tu sais te servir de With, Try, Select Case et de piloter un logiciel tiers comme dit plus haut. Les 3 premiers n'ayant pas d'importance ici, le dernier est ce qui nous interesse.

5/10.
NikatorS
Messages postés
149
Date d'inscription
mercredi 18 septembre 2002
Statut
Membre
Dernière intervention
15 avril 2011
-
Malheureusement ce n'est pas mon but. Si je poste du code plutôt qu'une source, c'est pour deux raisons :
- Tout le monde peut voir le code, pas seulement les inscrits VbFrance.
- Ce code a été extrait du programme sur lequel je travail, et il aurait été noyé dans la masse.

Je cherche juste à partager les informations que l'on ne trouve pas facilement. A part pour le zip et le rar on trouve pas grand chose de simple à utiliser sur
le web.
Mon code semble sans doute trop simple, mais je souhaite pas réinventer l'eau chaude. Dans mon cas, je n'ai aucun impératif de rapidité de traitement ou autre, il faut juste que ça fonctionne.

Quand à ta note, elle correcte et je pense que j'aurais mis la même chose si j'ai placé ce code au niveau "Initié". Mais je l'ai mis au niveau "Débutant".
Je veux pas "me la péter", juste partager.
Renfield
Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57 -
Je ne suis pas tout a fait d'accrod avec ton raisonnement, BigBoss9...

même un assemblage de fonctions et appels basiques peuvent devenir interessants...
un algo particulier, etc. c'est OK.

là, mon premier commentaire venait de ma relative deception ; puisque je m'attendait a voir recodé les algos de toutes ces methodes de compression.

maintenant, cette source est certes basique, mais il serait possible de gérer le retour mieux que True/False (simple test, le fichier est corrompu ou n'existe pas, je recoit 'False' en retour...

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.