2009-09-21 7 views
0

Nous avons un service Windows qui effectue les opérations suivantes: a. Obtenez les fichiers dans un répertoire particulier b. Déchiffrer le fichier c. Diviser les données dans le fichier d. Insérer les données dans la base de donnéesSuite à l'exception

A partir de maintenant, il est mis en œuvre de telle sorte qu'à la première exception, il mettra fin au processus et le fichier causant l'erreur est déplacé vers un autre dossier. Les fichiers traités avec succès restent au même endroit. Pour cette raison, à tout moment, seuls les fichiers les plus importants qui ne génèrent pas d'exceptions sont traités. Le reste d'entre eux sont laissés pour compte. Nous sommes obligés de redémarrer fréquemment le service pour obtenir tous les fichiers traités. Maintenant, nous devons changer la conception de telle sorte que, même en cas d'exception avec un fichier particulier, nous devrions continuer avec les fichiers restants. Nous avons les idées suivantes

a. Déplacez également les fichiers traités vers un autre emplacement lorsqu'ils sont traités avec succès b. Effectuez un appel de méthode récursive pour la même méthode qui traite les fichiers dans le bloc finally.

S'il vous plaît nous suggérer la meilleure façon de sortir. Merci d'avance.

Répondre

6

attraper l'exception, faire de la journalisation et continuer avec les fichiers restants? Je ne vois pas le problème

foreach(File f in filesToProcess) 
{ 
    try 
    { 
     ProcessFile (f); 
     MoveFile (f); 
    } 
    catch(IOException ex) 
    { 
     Log ("File could not be processed"); 
    } 
} 
+0

+1 mais je pense qu'il est très important de souligner que la capture * * explicites types d'exceptions comme cette réponse démontre qu'il est la bonne chose à faire. Ne pas attraper et supprimer System.Exception! –

+0

Dans la mesure du possible, essayez d'éviter les blocs catch (vous pouvez utiliser try finally blocks), Si c'est vraiment nécessaire, prenez des exceptions très précises dont vous pourriez avoir besoin au lieu d'attraper des exceptions générales. –

+0

Si vous n'utilisez pas de bloc catch, l'exception ne sera pas gérée. Il apparaîtra sur la pile jusqu'à ce qu'un bloc catch soit trouvé, et si aucun n'est trouvé, et que l'exception reste non gérée, l'application se terminera. try/finally a d'autres sémantiques, puis essayez/catch. –