Question

Je suis tombé sur l'extrait de code suivant. Les noms ont été modifiés pour protéger l'innocent:

    public void RunProgram()
    {
        System.IO.FileInfo fInfo = new System.IO.FileInfo(Application.StartupPath + "Program.exe");

        if (!fInfo.Exists)
        {
            System.Windows.Forms.MessageBox.Show("Program could not be found, please verify your installation.\n\nDetails:\n" + fInfo.FullName);
            return;
        }

        try
        {
            System.Diagnostics.Process  process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo pStart  = new System.Diagnostics.ProcessStartInfo(); 
            pStart.FileName = fInfo.FullName;
            pStart.UseShellExecute = true;
            process.StartInfo = pStart;
            process.Start();
        }
        catch
        {
            System.Windows.Forms.MessageBox.Show(string.Format("An error occurred trying to run the program:{0}", fInfo.FullName));
        }
    }

Je sais qu'il y a quelques choses qui ne vont pas ici:

  • Les types d'exception ne sont pas gérés individuellement
  • Le message d'erreur n'est pas suffisamment informatif

Rassurez-vous, je vais également y répondre, mais ma question principale concerne la vérification de l'existence du fichier juste avant le bloc try / catch. Cela me semble un peu redondant.

La gestion des exceptions a pour but de détecter les conditions inattendues. Je m'attends totalement à ce que le fichier soit là, donc supprimer le contrôle d'existence et laisser le traitement de l'exception le récupérer s'il ne semble pas être une solution raisonnable pour moi.

Qu'en pensez-vous?

Était-ce utile?

La solution

Il est redondant et peut donner un faux sentiment de sécurité. Veuillez noter que vous pouvez toujours obtenir une exception FileNotFound en raison de la simultanéité.

Voir également: Existe-t-il un cas où la validation des paramètres peut être considérée comme redondante?

Autres conseils

Le fichier n'existe pas est quelque chose que nous pouvons raisonnablement anticiper - et puisque nous sommes au niveau de l'interface utilisateur (je suppose, depuis MessageBox ), il est raisonnable de procéder à une vérification approfondie de la demande, et il suffit d’en informer directement l’utilisateur et d’annuler.

Si nous étions au fond des entrailles du code (quelques niveaux supprimés de l'interface utilisateur), une exception serait la bonne chose - mais je vérifierais probablement toujours l'existence du fichier en premier et donnerais une erreur sensible. Bien sûr, toute vérification d’existence de fichier est immédiatement une condition de fin du fil ;-p

Je vote pour supprimer le . Contrôle Exists () .

En ce qui concerne la gestion des types d’exception, mon mode normal consiste à commencer par un gestionnaire d’exception générique pour tout intercepter, mais également à vérifier que ces exceptions sont consignées. Puis séparez-le pour gérer une exception différente en fonction des journaux.

J'essaie toujours d'éviter les exceptions. C’est généralement parce que j’ai tendance à utiliser Visual Studio avec l’option pause sur les exceptions activée; essayez donc d’éviter les exceptions autant que possible.

J'ai également passé beaucoup de temps à travailler sur des systèmes embarqués pour lesquels lancer une exception coûtait cher. Ce n'est peut-être pas le cas pour C #.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top