Ceci permet de zipper un dossier grace à la dll #ZipLib tout en conservant l'organisation du dossier. Pour avoir plus d'info sur #ZipLib (SharpZipLib) consulter l'article sur DotNetGuru
http://www.techheadbrothers.com/DesktopDefault.aspx?tabindex=1&tabid=7&AId=23
Je sais qu'il existe deja cette source sur vbfrance :
http://www.vbfrance.com/code.aspx?id=25357 mais elle ne prend pas en compte un dossier, juste quelque fichiers isolés.
Le code est loin d'etre parfait, j'ai fait cette source pour un petit trucs que j'avais besoin rapidement, j'ai donc pas optimisé du tout, il faudrais au moins mettre ca dans un thread pouvoir choisir le dossier en paramètre etc...
Source / Exemple :
imports ICSharpCode.SharpZipLib.Zip
imports System.io
'On déclare une arraylist qui contiendras tous les fichiers
Private ListeInfo As New ArrayList
' La fonction qui va remplir notre arraylist
Private Function ListeFichier(ByVal repertoire As DirectoryInfo, ByVal Reset As Boolean) As ArrayList
If Reset = True Then
ListeInfo.Clear()
End If
If repertoire.GetDirectories.Length <> 0 Then
For Each repertoire2 As DirectoryInfo In repertoire.GetDirectories
ListeFichier(repertoire2, False)
Next
End If
For Each fichier As FileInfo In repertoire.GetFiles("*.*")
ListeInfo.Add(fichier.FullName)
Next
Return ListeInfo
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim isError as string
Try
Dim DI As New DirectoryInfo("D:\Documents\")
Dim astrFileNames As ArrayList = ListeFichier(DI, True)
Dim strmZipOutputStream As ZipOutputStream
strmZipOutputStream = New ZipOutputStream(File.Create("D:\Documents " & now.ToString("dd.MMMM.yyyy hh-mm") & ".zip"))
'Nombre de 1 à 9: 9 plus compressé
strmZipOutputStream.SetLevel(9)
For Each strFile As String In astrFileNames
Dim strmFile As FileStream = File.OpenRead(strFile)
Dim abyBuffer(strmFile.Length - 1) As Byte
strmFile.Read(abyBuffer, 0, abyBuffer.Length)
Dim RelatifstrFile As String
RelatifstrFile = strFile.Substring("D:\Documents\".Length)
Dim objZipEntry As ZipEntry = New ZipEntry(RelatifstrFile)
objZipEntry.DateTime = DateTime.Now
objZipEntry.Size = strmFile.Length
strmFile.Close()
strmZipOutputStream.PutNextEntry(objZipEntry)
strmZipOutputStream.Write(abyBuffer, 0, abyBuffer.Length)
Next
strmZipOutputStream.Finish()
strmZipOutputStream.Close()
Catch ex as Exception
isError = "Erreur :" & VbNewLine & ex.tostring
end try
if isError is nothing Then isError = "c'est OK, le zip est fait"
label1.text = isError
End Sub
Conclusion :
J'attends vos commentaires sur cette source
Un bug est connu : Si un des dossiers à zipper est vide, il ne sera pas présent dans le zip, je n'ai pas prévu de le corriger pour l'instant.
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.