Dézipper fichiers .zip

Signaler
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011
-
 cs_breton51 -
Bonjour à tous,

Je suis en train de coder un launcher Minecraft pour mon serveur.
Celui-ci doit donc télécharger des fichiers mis en ligne avec dropbox puis les mettre dans le dossier spécifié par mes soins. Pour cela, aucun problème.

My.Computer.Network.DownloadFile("url Dropbox", (Environment.SpecialFolder.ApplicationData) & "\.minecraft\dossier")

Comme vous le voyez, c'est un dossier qui est téléchargé.
Je dois donc le mettre en fichiers .zip pour qu'il puisse être téléchargé.

My.Computer.Network.DownloadFile("url Dropbox", (Environment.SpecialFolder.ApplicationData) & "\.minecraft\NomduDossier.zip")

Mon problème est comment faire pour que ce fichier .zip téléchargé soit dézipper automatiquement ?

Après une fois, le fichier dézipper, je supprime le fichier .zip

Kill(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) & "\.minecraft\NomDuDossier.zip")

J'ai cherché sur google et j'ai trouvé ceci d'intéressant mais apparemment c'est une application, donc je pourrais peut-être mettre le code dans ma Form1 et faire appelle à cette application pour dézipper, non ? Si oui, je vois pas du tout comment faire ?

P.S. : Je suis un débutant avec Visual Basic.

Merci d'avance pour vos réponses !

21 réponses

Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

Voici le code que j'ai trouvé : (J'ai oublié de le mettre dans mon précédent message )

Option Explicit

Sub Unzip()
Dim FSO As Object
Dim oApp As Object
Dim DossierZip As Variant
Dim DossierDezip As Variant

DossierZip = "C:\Faq\FaqVba\Exemples\ZipUnZip\Tst.zip"
DossierDezip = ThisWorkbook.Path & "\Data"

Set FSO = CreateObject("Scripting.FileSystemObject" )
If FSO.FolderExists(DossierDezip) Then
FSO.DeleteFile DossierDezip & "\*.*", True
FSO.DeleteFolder DossierDezip & "\*.*", True
End If
Set FSO = Nothing

If CreationDossier(DossierDezip) Then

Set oApp = CreateObject("Shell.Application" )
oApp.Namespace(DossierDezip).CopyHere oApp.Namespace(DossierZip).items
Set oApp = Nothing

Application.StatusBar = "Les fichiers Dézippés se trouvent dans : " & DossierDezip
End If
End Sub
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Tu as récupéré un code VB6 alors que tu codes en .NET, il faut l'adapter.
Evites d'utiliser FSO, surtout avec .NET, il y a des méthodes intégrées avec le Framework dans la majorité des cas.

Recherches plutôt avec ces termes : "vb.net unzip"

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

J'ai trouvé ce code à cette adresse : http://dotnetzip.codeplex.com/wikipage?title=VB-examples&ProjectName=dotnetzip

Private Sub MyExtract
Dim ZipToUnpack As String = "C1P3SML.zip"
Dim UnpackDirectory As String = "Extracted Files"
Using zip1 As ZipFile = ZipFile.Read(ZipToUnpack)
Dim e As ZipEntry
' here, we extract every entry, but we could extract conditionally,
' based on entry name, size, date, checkbox status, etc.
For Each e In zip1
e.Extract(UnpackDirectory, ExtractExistingFileAction.OverwriteSilently)
Next
End Using
End Sub

Si je comprends, ce code utilise DotNetZip qui est un kit de développeur à installer avec VB.Net...
Je comprends de moins en moins... Il faudrait que j'installe ce kit, que je mette ce code dans ma Form1... Mais ou sont enregistrés les fichiers dézippés ?
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Il faut que tu fasse une référence vers l'assembly DotNetZip via l'onglet "Références" des propriétés du projet.

Ensuite pour le dossier de destination, je crois qu'il faut regarder du coté de : UnpackDirectory

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

J'ai trouvé l'onglet référence et comment ajouter l'assembly 'Ionic.Zip.dll'.

Que veux-tu dire par aller regarder du côté de 'UnpackDirectory' ?

Pour que mon programme dézippe le fichier téléchargé à l'aide de DotNetZip, que dois-je faire ?

Merci de ton aide !
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

- Tu as un bouton "Ajouter", regardes le ...
- Le nom de la variable indique peut être sa fonction
- Il faut enregistrer le fichier sur le disque, je pense, puis le dézziper.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

J'ai déjà ajouter Ionic.Zip dans Références.

Mais comment faire en sorte, qu'une fois le fichier téléchargé sur le disque du client, qu'il soit dézippper automatiquement ?
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

Je viens de trouvé ce code qui utilise la classe GzipStream :

Imports System.IO
Imports System.IO.Compression
Module Module1

Sub Main()
' Path to directory of files to compress.
Dim dirpath As String = "c:\users\public\reports"

Dim di As DirectoryInfo = New DirectoryInfo(dirpath)


' Compress the directory's files.
For Each fi As FileInfo In di.GetFiles()
Compress(fi)
Next

' Decompress all *.gz files in the directory.
For Each fi As FileInfo In di.GetFiles("*.gz")
Decompress(fi)
Next

End Sub

' Method to compress.
Private Sub Compress(ByVal fi As FileInfo)
' Get the stream of the source file.
Using inFile As FileStream = fi.OpenRead()
' Compressing:
' Prevent compressing hidden and already compressed files.

If (File.GetAttributes(fi.FullName) And FileAttributes.Hidden) _
<> FileAttributes.Hidden And fi.Extension <> ".gz" Then
' Create the compressed file.
Using outFile As FileStream = File.Create(fi.FullName + ".gz")
Using Compress As GZipStream = _
New GZipStream(outFile, CompressionMode.Compress)

' Copy the source file into the compression stream.
inFile.CopyTo(Compress)

Console.WriteLine("Compressed {0} from {1} to {2} bytes.", _
fi.Name, fi.Length.ToString(), outFile.Length.ToString())

End Using
End Using
End If
End Using
End Sub

' Method to decompress.
Private Sub Decompress(ByVal fi As FileInfo)
' Get the stream of the source file.
Using inFile As FileStream = fi.OpenRead()
' Get orignial file extension, for example "doc" from report.doc.gz.
Dim curFile As String = fi.FullName
Dim origName = curFile.Remove(curFile.Length - fi.Extension.Length)

' Create the decompressed file.
Using outFile As FileStream = File.Create(origName)
Using Decompress As GZipStream = New GZipStream(inFile, _
CompressionMode.Decompress)

' Copy the decompression stream
' into the output file.
Decompress.CopyTo(outFile)

Console.WriteLine("Decompressed: {0}", fi.Name)

End Using
End Using
End Using
End Sub
End Module

Pour l'incorporer à mon programme, je le mets au début de mon code et automatiquement, les fichiers .gzip seront décompresser dans le dossier où ils ont été téléchargés ?
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Quand tu posts un code, merci de lire le point 2 de ma signature, ce sera plus lisible.

Sans regarder plus que ça, je pense que c'est dans le même dossier que le fichier à compresser.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
31
Bonsoir,

@Blodarn, la première méthode est la bonne si tu souhaites dézipper une archive ZIP contenant une arborescence. La seconde solution ne fonctionne que pour les fichier directement compressés et via la méthode GZip, le fichier ne doit pas être une archive.

Une fois que tu as référencé l'assembly à ton projet il ne te reste qu'à saisir le code pour te servir de celle-ci. Voici un lien vers la documentation de la librairie en question.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

Si le fichier est un .rar, la 1er solution va marcher ? Ou si j'ai bien compris, la 1er solution marchera avec les fichiers compressés avec windows (bouton droit > envoyer vers... > dossier compressé) ?
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
31
Non, le .rar est un format propriétaire de Winrar et qui n'a rien à voir avec le zip. Donc tu peux oublier tes librairie ZIP. Pour le rar, une seule solution: utiliser les librairies de Winrar, tu pourras trouver des sources ici je pense. Mais attention, la librairie n'est pas libre de droit et tu n'auras pas le droit de la distribuer donc ceux qui utiliseront ton programme devront acheter une licence de Winrar ou installer une version démo.




Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

Pas de problème, je mets mes fichiers en .zip.

Voici le code que j'ai pris !
http://imageshack.us/photo/my-images/827/codeay.jpg/

Je veux décompresser le ''resources.zip'' donc le programme télécharge le .zip dans \minecraft\resources.zip

J'imagine que là, je dois faire appelle à la référence que j'ai crée mais comment ?

http://imageshack.us/photo/my-images/23/code2g.jpg/

Ou est-ce qu'il faut qu'à chaque fois, je mette le code en-dessous de la ligne de code de téléchargement ?
Messages postés
2814
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
2 juin 2020
31
Heu... Tu sais lors ce que l'on te donne un code il faut en comprendre le sens sinon je ne vois pas l'intérêt...

Le code que tu as copié à une signification particulière, entre autre il faut préciser un chemin de sortie et une archive source, question de logique, un code copié/collé ne peux pas deviner l'emplacement de ton archive ni l'endroit ou tu veux l'extraire.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

Ok, je suis en train de tester quelque chose.

Par contre, il me met comme erreur que la variable 'e' masque une variable dans un bloc englobant.. Sa veut dire quoi ?
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

C'est bon, trouvé le problème.
Messages postés
16
Date d'inscription
jeudi 7 octobre 2010
Statut
Membre
Dernière intervention
25 novembre 2011

J'ai un nouveau problème, le programme m'affice une erreur quand il faut qu'il télécharge mes fichiers qui sont sur Dropbox.

My.Computer.Network.DownloadFile("http://dl.dropbox.com/u/46636865/DRVersion.txt", (Environment.SpecialFolder.ApplicationData) & "\.minecraft\bin\DRVersion.txt")


L'url est la bonne, le problème viendrait donc de ''My.Computer.Network.DownloadFile'' ?
Messages postés
14770
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
27 février 2021
151
Bonjour,

Blodarn, Essayes d'ouvrir un nouveau sujet pour cela, le tien étant très ancien.

"le programme m'affice une erreur"
Quelle erreur ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site