Bonjour à tous,
Je me posais une question à propos du fonctionnenement de try, catch, finally.
Jusqu'à maintenant j'ai toujours utilisé ces mots clés de façon à ce que si une exception intervient, j'arrête la routine en cours et passe à autre chose le cas échéant. Mais j'ai un problème sur un bout de code...
Même si une exception intervient sur mon code, je voudrais que le programme continue à s'exécuter.
Voilà mon code (sans gestion d'exception pour l'instant). Le code suivant efface tous les fichiers et sous répertoires de C:\Documents and Settings\utilisateur\Local Settings\Temp (PathToTemp), sauf les fichiers *.log à la racine.
Plusieurs types d'exception peuvent être lancés lors de l'utilisation de Delete.
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 DirectoryInfo DirRoot = new DirectoryInfo(PathToTemp); DirectoryInfo[] DirSub = DirRoot.GetDirectories("*"); int NumOfSubDir = DirSub.Length; //delete all files in /temp foreach (FileInfo f in DirRoot.GetFiles("*.*")) { if (f.Extension != ".log") { f.Delete(); } } //delete all files and all subdirectories for (int i = 0; i < NumOfSubDir; i++) { DirSub[i].Delete(true); }
Ce que j'aimerais, même si j'entoure ce code d'un try{}, c'est que si un fichier ou un sous-répertoire ne peut être effacé (fichier ouvert par une autre application par exemple), je puisse continuer quand même comme si de rien n'était en continuant à effacer le reste des fichiers et sous-répertoires et laissant de coté le fichier ayant lancé cette exception.
Comment implémenter cela ?
J'ai regarder sur les mots clé try, catch, finally dans le SDK, mais je n'ai rien vu sur la reprise du code fautif, généralement on ressort de la fonction en l'abandonnant purement et simplement et en indiquant à l'utilisateur que quelque chose c'est mal passé, mais rien de plus.
En vous remerciant![]()
Partager