Вопрос

Требование:При ошибке (выброшенном исключении) обрабатываемый файл следует переместить в папку для файлов с ошибками (настройка 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

На самом деле это вышло еще более ужасно, чем я думал.

Теперь я знаю, что делаю что-то неправильно.Как мне на самом деле следует пытаться обработать возможную ошибку, возникающую при перехвате, чтобы я мог перемещать файлы и пытаться вызвать свое событие?

Это было полезно?

Решение

Мне все это кажется хорошим.Совершенно разумно размещать блоки try catch внутри catch.Вы можете проверить все, что вы упомянули, но всегда есть вероятность, что сеть выйдет из строя или вы просто не сможете записать этот файл.Что вы будете делать после этого, зависит от вас.Сообщение об ошибке и приостановка обработки кажутся разумными.

Другие советы

Именно так вы и поступили бы, используя только исключения.Вы можете рассмотреть возможность использования флагов, но это тоже не лучше:

(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

Не намного лучше...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top