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

Signaler
Messages postés
548
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
13 juillet 2020
-
Messages postés
548
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
13 juillet 2020
-
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
2242
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 octobre 2020
115
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
548
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
13 juillet 2020
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
2242
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 octobre 2020
115
une fois le téléchargement fini il faut fermer le WebClient ce qui libérera le fichier téléchargé
Messages postés
548
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
13 juillet 2020
1
Le fermer ? j'ai essayé de faire un myWebClient.Dispose(); juste avant, mais sans succès...
Messages postés
2242
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
17 octobre 2020
115
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
548
Date d'inscription
mardi 16 avril 2013
Statut
Membre
Dernière intervention
13 juillet 2020
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 !