Как мне переместить файл в исключение?
Требование: в случае ошибки (сгенерированное исключение) обрабатываемый файл следует переместить в папку для файлов с ошибками (параметр app.config).
Проблема: Единственный способ справиться с этим - использовать вложенный Try/Catch внутри основного Try/Catch, чтобы попытаться переместить файл. Таким образом, если перемещение завершится неудачно, выдается другое исключение. Я знаю, что могу сделать все возможное, чтобы убедиться, что каталог существует, права даны, но поскольку это сетевой диск... Я просто знаю, что в какой-то момент обязательно произойдет ошибка.
пример
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
На самом деле это оказалось еще более ужасным, чем я думал, на что это будет похоже.
Теперь я знаю, что делаю что-то не так. Как на самом деле я должен пытаться обработать возможную ошибку, возникающую в перехвате, чтобы я все еще мог перемещать файлы и пытаться вызвать мое событие?
2 ответа
Это все выглядит хорошо для меня. Это вполне разумно, чтобы попытаться поймать блоки внутри улова. Вы можете проверить все вещи, которые вы упомянули, но всегда есть вероятность, что сеть выйдет из строя, или вы просто не сможете записать этот файл. Что вы делаете после этого, зависит от вас. Сообщение об ошибке и приостановка обработки кажутся разумными.
Именно так вы и поступите, когда используете только исключения. Вы можете рассмотреть возможность использования флагов, но это тоже не лучше:
(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
Не намного лучше...