Décompresser un fichier après un DownloadFileAsync [Résolu]

Signaler
Messages postés
588
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
26 mars 2021
-
Messages postés
588
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
26 mars 2021
-
Bonjour, je fais appel à vous car je me confronte à un problème qui semble de taille pour moi...

Je télécharge une archive .zip à l'aide d'un WebClient et de la méthode DownloadFileAsync :
myWebClient.DownloadFileAsync(new Uri(url, temp_file);


Je voudrais seulement décompresser le fichier après... J'ai donc essayé :
myWebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(UnZip);

UnZip étant ma fonction de décompression... Sauf que ça ne marche pas car le WebClient semble encore utilisé l'archive. Est-ce que quelqu'un aurait une solution ?

J'utilise le Async car je dois afficher le pourcentage du téléchargement et la vitesse...

Merci d'avance.

3 réponses

Messages postés
2402
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 avril 2021
130
Bonjour
Visual Studio possède en interne une class qui peut faire l'extraction d'une archive Zip : https://docs.microsoft.com/fr-fr/dotnet/api/system.io.compression.zipfile?view=netcore-3.1
A exploiter une fois le téléchargement terminé

Messages postés
588
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
26 mars 2021
1
Oui, mais je sais décompresser un fichier... le problème est que avec la version Async de la fonction, elle ne peux pas y accéder car une fois le télécharger terminé, le WebClient semble encore utiliser le fichier

Merci pour la réponse.
Messages postés
2402
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 avril 2021
130
une fois le téléchargement fini il faut fermer le WebClient ce qui libérera le fichier téléchargé
Messages postés
588
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
26 mars 2021
1
Le fermer ? j'ai essayé de faire un myWebClient.Dispose(); juste avant, mais sans succès...
Messages postés
2402
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
14 avril 2021
130
Bonjour
il faut intégrer un gestionnaire d'évènement
la ligne qui n'est pas correcte est celle-ci
myWebClient.DownloadFileCompleted += new AsyncCompletedEventHandler(UnZip);

il faut la mettre dans le Form_Load de ta Form de cette façon : c'est ton gestionnaire d'évènement . Cet évènement se déclenchera une fois le téléchargement terminé .
myWebClient.DownloadFileCompleted += ExtractFile;

Le mot ExtractFile doit être souligné en rouge : évidement nous n'avons pas créé la Sub qui doit s'exécuter une fois l'évènement déclenché .
Ci-joint un exemple avec un de mes codes ( AjouterListeMots est souligné en rouge )

Fais un clic droit sur le mot souligné et crée la Sub d'extraction de ton fichier en cliquant sur le message qui t'es affiché

Messages postés
588
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
26 mars 2021
1
Bonjour,
Merci, mais j'ai réglé le problème autrement, j'avais bien compris qu'il fallait créer une autre méthode... Je l'avais même déjà fait, mais en passant par cette solution, le fichier est encore utilisé, on ne peut donc pas l'extraire, j'ai donc joué sur les threads avec des threads.Join() et le WebClient (et sa méthode isBusy()) et le problème est réglé.

Merci beaucoup pour l'aide !