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

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

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.