Décompresser un fichier après un DownloadFileAsync

Résolu
M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 - 9 juil. 2020 à 12:59
M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 - 11 juil. 2020 à 11:57
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

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 9 juil. 2020 à 14:21
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é

0
M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 1
9 juil. 2020 à 14:41
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.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
9 juil. 2020 à 14:44
une fois le téléchargement fini il faut fermer le WebClient ce qui libérera le fichier téléchargé
0
M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 1
9 juil. 2020 à 15:06
Le fermer ? j'ai essayé de faire un myWebClient.Dispose(); juste avant, mais sans succès...
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié le 9 juil. 2020 à 15:39
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é

0
M3NSONG3 Messages postés 615 Date d'inscription mardi 16 avril 2013 Statut Membre Dernière intervention 4 novembre 2021 1
11 juil. 2020 à 11:57
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 !
0
Rejoignez-nous