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

C# Discussion :

Occurence d'exception IO innatendue


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Par défaut Occurence d'exception IO innatendue
    Hello, L'exception est réellement inattendu dans ce cadre la, surtout qu'elle ne surgit qu'une 1 Fois sur / 3

    Voila le code ou sa planque (code remanier un peu pour tester W_w)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
              try
               {
                   StreamReader readP1 = new StreamReader(Application.StartupPath + "\\pdata\\patchlist.php");
                   readP1.Close();
                }
               catch { Thread.Sleep(400); StreamReader readP2 = new StreamReader(Application.StartupPath + @"\pdata\patchlist.php"); readP2.Close(); }
    quand a ce fameux patchlist, il provient d'un téléchargement aussi robuste que possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
            public void Download(Uri url, string path, string status)
            {
                Program.myform.statusLabel.Invoke((ThreadStart)delegate()
              {
                  Program.myform.statusLabel.Text = "Status :" + status;
    
              });
                if (!Directory.Exists(Path.GetDirectoryName(path))) Directory.CreateDirectory(Path.GetDirectoryName(path));
                if (File.Exists(path)) File.Delete(path);
                WebClient client = new WebClient();
                client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
                client.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(client_DownloadFileCompleted);
                DataTreatement.wait = true;
                using (WebClient wcDl = new WebClient())
                {
                    try
                    {
                        wcDl.DownloadFileAsync(url, path);
                    }
                    catch { System.Windows.Forms.MessageBox.Show("EXCEPTION TEST"); }
                }
            }

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    StreamReader est IDisposable, il devrait être utilisé dans un using. De plus, si il y a bien un try ... catch sur readP1, il n'y en a pas sur readP2 ce qui signifie que si une exception se produit sur readP2, le programme plante. Ce qui aurait pu nous aider, c'est le message de l'IOException (ou alors il faut le deviner ?). Mais bien entendu, tu ne l'as pas parce que tu utilises un try ... catch qui ne te permet pas de remonter l'erreur. Ton code va effectivement catcher toutes les exceptions (quasiment ...) mais ne sachant pas déterminer quel type d'exception s'est produit, il ne pourra pas entreprendre les actions adéquates.

    Un code robuste serait d'utiliser des constructions du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
       using(StreamReader readP1 = new StreamReader(fileName)) {
          ...
       }
    } catch(IOException ioe) {
       MessageBox.Show("Erreur IOException : " + ioe.Message);
    } catch(Exception e) {
       MessageBox.Show("Erreur Exception : " + e.Message);
    }
    parce qu'on sait que la plupart du temps StreamReader va faire des IOException, mais ce n'est pas toujours le cas (il peut également levé des SecurityException par exemple). De plus ce code permet d'obtenir l'information Message (et d'autres comme StackTrace par exemple) qui permettent de facilement débuguer le code.

    Concernant le code "robuste" (), il sert à quoi le WebClient client ? Il n'est pas utilisé ... et tu instancies un nouveau WebClient (wcDl) pour downloader la page de façon asynchrone pour lequel tu n'es pas abonné aux événements ... je ne comprends pas trop la logique dans tout ça. Même remarque pour ton try ... catch qui est loin d'être "robuste" ... comme la plupart du code que tu as posté ici depuis le début (désolé).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Par défaut
    non non c'était bon et simple au début, mais j'ai tendance a bidouiller mon code après ce genre d'erreur pour tester ;(.

    Sinon ,l'exception est qu'il ne parvient pas a lire le fichier car il est censé etre déja ouvert W.W

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    ... et donc ? ... la seule raison pour qu'un fichier soit déjà ouvert, c'est qu'il soit déjà ouvert.

    A toi de trouver pourquoi, le code fourni ne nous permet pas, à mon avis, de le savoir.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    ... et donc ? ... la seule raison pour qu'un fichier soit déjà ouvert, c'est qu'il soit déjà ouvert.

    A toi de trouver pourquoi, le code fourni ne nous permet pas, à mon avis, de le savoir.
    Pourtant ca représente 100% de mon code en dehors de la forme.

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Je suppose donc que tu n'attends pas la fin du download pour tenter de charger le fichier.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [debutant] "exception occured executing command line"
    Par hariri dans le forum Eclipse Java
    Réponses: 13
    Dernier message: 22/05/2007, 10h06
  2. Réponses: 2
    Dernier message: 16/11/2006, 17h09
  3. Réponses: 2
    Dernier message: 27/09/2005, 16h32
  4. [Graphics2D]pb, fatal exception occured
    Par julien.v dans le forum 2D
    Réponses: 17
    Dernier message: 03/06/2005, 11h09
  5. Error 80020009. Exception occurred
    Par twizell dans le forum ASP
    Réponses: 5
    Dernier message: 14/04/2005, 20h35

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