¿Cómo debo mover un archivo En Excepción?
-
13-09-2019 - |
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?
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 ...