Domanda

Il requisito:   Su un errore (eccezione generata), il file in fase di elaborazione dovrebbe essere spostato nella cartella dei file con errori (impostazione app.config).

Il problema:   L'unico modo che posso di gestire questo è di avere un nidificato try / catch all'interno dei principali try / catch per tentare di spostare il file, in questo modo se la mossa non riesce, un altro viene generata un'eccezione. So che posso fare del mio meglio per assicurarsi che esista la directory, i diritti sono date, ma dal momento che è un disco di rete ... so solo un errore è destinato ad accadere ad un certo punto.

Esempio

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

In realtà che è venuto fuori ancora più orribile di quello che stavo pensando che sarebbe simile.

Ora so che sto facendo qualcosa di sbagliato. Come dovrei davvero cercare di gestire un eventuale errore che si verificano nella cattura, in modo che possa ancora spostare i file e provare a chiamare il mio evento?

È stato utile?

Soluzione

Che tutto sembra buono per me. È perfettamente ragionevole avere blocchi try cattura all'interno di una cattura. È possibile controllare tutte le cose che lei ha citato, ma c'è sempre la possibilità che la rete non si alza o si semplicemente non sarà in grado di scrivere quel file. Quello che fai dopo che è fino a voi. Un messaggio di errore e l'elaborazione pausa sembra ragionevole.

Altri suggerimenti

Questo è esattamente come lo faresti quando si utilizza solo eccezioni. Si potrebbe considerare l'utilizzo di bandiere, ma che non è né meglio:

(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

Non è che molto meglio ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top