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.
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.