0

L'exigence: En cas d'erreur (exception levée), le fichier en cours de traitement doit être déplacé dans le dossier pour les fichiers contenant des erreurs (paramètre app.config). Le problème: Le seul problème que je peux surmonter est d'avoir un Try/Catch imbriqué dans le Try/Catch principal pour essayer de déplacer le fichier, de cette façon si le déplacement échoue, une autre exception est levée . Je sais que je peux faire de mon mieux pour m'assurer que le répertoire existe, que les droits sont donnés, mais comme c'est un lecteur réseau ... Je sais juste qu'une erreur est sur le point de se produire à un moment donné.Comment est-ce que je devrais déplacer un dossier sur l'exception?

Exemple

Try 
    (Do Some Logic, but an error happens) 
Catch ex As Exception 
    Try 
     (Attempt to move file) 
    Catch exinner as Exception 
     Throw New Exception("Cannot move file to Error Directory", innerex) 
    End Try 
    (Raise Error Event for logging by form/batch app) 
End Try 

En fait, qui est sorti encore plus horrible que ce que je pensais que ce serait ressembler. Maintenant, je sais que je fais quelque chose de mal. Comment est-ce que je devrais vraiment essayer de manipuler une erreur possible se produisant dans la prise, de sorte que je puisse toujours déplacer des dossiers et essayer d'appeler mon événement?

Répondre

3

Tout cela me semble bien. Il est parfaitement raisonnable d'essayer d'attraper des blocs à l'intérieur d'une prise. Vous pouvez vérifier toutes les choses que vous avez mentionnées, mais il est toujours possible que le réseau tombe en panne ou que vous ne puissiez pas écrire ce fichier. Ce que vous faites après cela dépend de vous. Un message d'erreur et un traitement de pause semblent raisonnables.

+0

assez juste. Merci, ça m'a paru mal de faire comme ça, mais ça explique pourquoi je ne pouvais pas penser à quelque chose de mieux. – RiddlerDev

1

C'est exactement ce que vous feriez si vous n'utilisiez que des exceptions. Vous pouvez envisager d'utiliser des drapeaux, mais ce n'est pas mieux non plus:

(Set file processing error flag to false) 
Try 
    (Do Some Logic, but an error happens) 
Catch ex As Exception 
    (Set file processing error flag to true) 
End Try 

IF (file processing error flag = true) 
    Try 
     (Attempt to move file) 
    Catch exinner as Exception 
     Throw New Exception("Cannot move file to Error Directory", innerex) 
    End Try 
    (Raise Error Event for logging by form/batch app) 
End Try 

pas beaucoup mieux ...

+0

Je dirais que c'est moins propre. – stimms

+0

Bien sûr, c'est la raison pour laquelle j'ai dit que l'approche des Exceptions imbriquées correspondait exactement à ce que vous feriez correctement. –