Pregunta

El requisito:   En un error (excepción lanzada), el archivo que se está procesando se debe mover a la carpeta de archivos con errores (configuración app.config).

El problema:   La única manera que puedo de manejar esto es tener a Try anidada / Catch interior de la principal try / catch para tratar de mover el archivo, de esa manera si el movimiento falla, se produce otra excepción. Sé que puedo hacer todo lo posible para asegurarse de que existe el directorio, se les da derechos, pero ya que es una unidad de red ... sólo sé un error tiene que suceder en algún momento.

Ejemplo

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 realidad eso salió aún más horrible que lo que estaba pensando que se vería así.

Ahora sé que estoy haciendo algo mal. ¿Cómo debería realmente estar tratando de manejar un posible error que ocurren en la captura, por lo que todavía puedo mover archivos y tratar de llamar a mi caso?

¿Fue útil?

Solución

Todo eso se ve bien para mí. Es perfectamente razonable tener bloques catch try dentro de un retén. Se puede comprobar todas las cosas que usted ha mencionado, pero siempre existe la posibilidad de que la red va a ir hacia abajo o que simplemente no será capaz de escribir ese archivo. Lo que se hace después de eso depende de usted. Un mensaje de error y el procesamiento de pausa parece razonable.

Otros consejos

Así es exactamente como usted lo haría cuando se utiliza únicas excepciones. Se podría considerar el uso de banderas, pero eso no es mejor tampoco:

(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

No es que mucho mejor ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top