IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[vb.net] pb exception / webclient


Sujet :

Windows Forms

  1. #1
    xeo
    xeo est déconnecté
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Par défaut [vb.net] pb exception / webclient
    Dans un petit programme, j'ai besoin de récupérer des fichiers sur le serveur de mon site.
    J'utilise webclient et ca fonctionne bien sauf que a la seconde lecture de mon code, le programme s'arrete a cause d'une exception...

    voici mon code :


    Sub

    main()

    Dim WEB_CLIENT AsNew System.Net.WebClient()
    Dim REMOTE_URL AsString = "http://www.monsite/monfichier.txt"
    Dim REMOTE_URL2 AsString = "http://www.monsite/monfichier2.bmp"
    Dim REMOTE_URL3 AsString = "http://www.monsite/monfichier3.bmp"
    Dim DNL_FILE AsString = "C:\monfichier.txt"
    Dim DNL_FILE2 AsString = "C:\monfichier2.bmp"
    Dim DNL_FILE3 AsString = "C:\monfichier3.bmp"

    Try
    WEB_CLIENT.DownloadFile(REMOTE_URL, DNL_FILE)
    WEB_CLIENT.DownloadFile(REMOTE_URL2, DNL_FILE2)
    WEB_CLIENT.DownloadFile(REMOTE_URL3, DNL_FILE3)
    WEB_CLIENT.Dispose()
    WEB_CLIENT = Nothing

    Catch ex As Exception
    MsgBox(ex.Message)

    EndTry

    EndSub

    Donc a la premiere lecture, mes 3 fichiers se téléchargent, ca marche nickel...

    A la seconde lecture :
    L'exception se produit a la ligne
    WEB_CLIENT.DownloadFile(REMOTE_URL2, DNL_FILE2)
    Ce que je comprends pas, c'est pourquoi l'exception se produit au telechargement de mon second fichier plutot qu'au premier.

    J'ai pas mal cherché la solution mais pas trouvé alors je me tourne vers vous...

    J'avoue ne pas trop comprendre le fonctionnement des exceptions étant tout nouveau en .NET... (faut bien évoluer )

    Au début je pensais que c'était un pb de ressources que je ne libérais pas, c'est pour ca que j'ai mis :
    WEB_CLIENT.Dispose()
    WEB_CLIENT = Nothing
    Mais ca change pas grand chose...

    Avec le debugueur, on me dit de vérifier la propriété InnerException mais apres quelques recherches, ca m'avance pas bcp...

    Merci de vos réponses.

  2. #2
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Salut

    Quel est l'intitule de l'exception?

    Il se pourrait que .DownloadFile ne soit pas capable d'ecraser un fichier existant du meme nom...

  3. #3
    xeo
    xeo est déconnecté
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Par défaut
    arf, j'ai pas l'intitulé de l'exception sous les yeux...
    Je la mettrais ici ce soir.

    Le premier fichier que je télécharge (fichier.txt) , j'arrive bien a l'écraser alors qu'il est sur mon disque...
    Donc je ne sais pas si ca peut venir de la.

    Je vais essayer aussi avec la méthode asynchrone (DowloadFileAsync), ca vient peut-être du type de lecture que je fais...

    Je réfléchis en écrivant mon message et je me dis que quand je lance mon code pour la premiere fois, les 3 fichiers que je télécharge existe deja sur mon disque dur.
    Donc a la 1ere lecture du code, y'a aucun soucis, il écrase bien les fichiers existants du meme nom.

    De mémoire, il fallait que je vérifie la propriété "InnerException" pour cibler le soucis...

    Je ferais tout ca ce soir mais si vous avez d'autres idées, je suis preneur

    merci en tout cas

  4. #4
    xeo
    xeo est déconnecté
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Par défaut
    donc j'ai remplacé :
    Catch ex As Exception
    MsgBox(ex.Message)
    par :
    Catch ex As Exception
    MsgBox(ex.InnerException)
    et le message d'erreur est :
    "L'argument 'Prompt' ne peut pas etre converti en type 'String'"
    ...

    ca m'avance pas bcp

  5. #5
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Je viens de tester ta mini appli (avec d'autres url), en appelant deux fois la sub, ca marche bien

    Comment appelles-tu ce code deux fois?

  6. #6
    xeo
    xeo est déconnecté
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Par défaut
    je l'apelle via un bouton tout simplement.
    J'ai mis mon code dans un module que j'apelle dans ma form.

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

    Call recup_donnes.main()

    end sub
    et le module appeler :

    Module recup_donnes
    Sub main()

    Dim WEB_CLIENT AsNew System.Net.WebClient()
    Dim REMOTE_URL AsString = "http://www.monsite/monfichier.txt"
    Dim REMOTE_URL2 AsString = "http://www.monsite/monfichier2.bmp"
    Dim REMOTE_URL3 AsString = "http://www.monsite/monfichier3.bmp"
    Dim DNL_FILE AsString = "C:\monfichier.txt"
    Dim DNL_FILE2 AsString = "C:\monfichier2.bmp"
    Dim DNL_FILE3 AsString = "C:\monfichier3.bmp"

    Try
    WEB_CLIENT.DownloadFile(REMOTE_URL, DNL_FILE)
    WEB_CLIENT.DownloadFile(REMOTE_URL2, DNL_FILE2)
    WEB_CLIENT.DownloadFile(REMOTE_URL3, DNL_FILE3)
    WEB_CLIENT.Dispose()
    WEB_CLIENT = Nothing

    Catch ex As Exception
    MsgBox(ex.Message)

    End Sub
    End Module
    ca viendrait de la déclaration de mes varibles qui sont en locales???

  7. #7
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    En mettant le code dans un module j'ai des symptomes etranges...

    Passe ton code du module dans une classe et appelle le code ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
     
    Dim Rd1 as new RecupDonnees
    Call Rd1.main()
     
    end sub

  8. #8
    xeo
    xeo est déconnecté
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Par défaut
    J'ai finis par contourner un peu le probleme...
    J'ai essayé un tas de truc, ainsi que d'appeler mon code dans une classe comme tu me l'as conseillé ( je l'ai mis direct sous ma form aussi) mais toujours les memes symptomes et toujours cette fichue exception qui arrive toujours a la meme ligne!!!

    Pour contourner le probleme, j'ai mis mon code au chargement de ma form...
    Comme ca je suis sur qu'il est éxécuter qu'une seule fois.
    Je présiserais juste que la mise a jour de la base de données se fait au démarrage de mon prog.

    Mais bon, je n'ai fais que contourner le soucis plutot que de le résoudre donc si jamais qqun voit ou est le pb, je serais ravis de le savoir

    Mais je trouve ca étrange que ca marche chez toi Piotrek, je dois passer a coté de quelque chose

  9. #9
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Je n'ai mis que le code pour telecharger les fichiers dans une nouvelle solution.

    Execute ton code en pas-a-pas (F8) et reflechis bien a l'impact de chaque ligne de code, lis-tu les fichiers telecharges? sont ils bien refermes lorsque tu tente de les ecraser?

    C'est pas le code lui meme qui pose le pb, c'est quelque chose de peripherique... Bon courage

  10. #10
    xeo
    xeo est déconnecté
    Membre averti
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Par défaut
    Piotrek a dis :
    sont ils bien refermes lorsque tu tente de les ecraser?
    je crois que tu as mis le doigt sur le soucis

    Mon premier fichier telecharger est un fichier texte que je lis et ensuite, je le ferme. Sur celui la, il n'y a aucun soucis.

    Par contre mes deux autres fichiers sont des .bmp que je copie donc sur mon disque dur et ensuite je les insere dans ma Form...
    exemple :
    PictureBox3.Image = Image.FromFile("C:\monfichier2.bmp")
    Au second telechargement, mes deux fichiers .bmp sont donc utilisés dans ma Form.
    Ca doit etre pour ca que ca plante, on ne peut surement pas écraser des fichiers présents sur le disque si ils sont utilisés dans ma Form...?

    Avant de faire ma mise a jour des fichiers, il faudrait donc que je décharge tout mes 'picturebox' ?
    avec un truc style :
    PictureBox3.image = Nothing

  11. #11
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    He oui puisque tes images sont utilisees par la form, pas moyen de les ecraser.

    Soit tu decharge l'image de la form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PictureBox3.image = Nothing
    comme tu l'as dit
    Cependant l'image ne sera effectivement plus utilisee qu'apres le passage du Garbage collector, et comme il passe un peu quand il veux, il peut etre utile de le forcer a passer:
    a mettre bien sur apres le =Nothing

    Soit tu enregistre les nouveaux telechargements sous un autre nom (c'est mieux si la frequence de telechargements/rafraichissements est elevee) et tu supprime les fichiers temporaires au moment adequat (fermeture de la form ou de l'application)

Discussions similaires

  1. Utilisation du module Net::SSH::Except
    Par fripette dans le forum Modules
    Réponses: 8
    Dernier message: 18/07/2011, 16h23
  2. JAVA Net Connect Exception
    Par diegosaure dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2008, 08h25
  3. [VB.Net][XML] Exception sur un readXML
    Par arnolem dans le forum VB.NET
    Réponses: 11
    Dernier message: 20/04/2006, 17h12
  4. Réponses: 9
    Dernier message: 31/05/2005, 10h05
  5. [VB.NET] Exception si DataGrid mis a jour
    Par florent_g dans le forum Windows Forms
    Réponses: 1
    Dernier message: 25/10/2004, 12h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo