Pergunta

A exigência: Em um erro (exceção lançada), o arquivo que está sendo processado deve ser movida para a pasta de arquivos com erros (configuração app.config).

O problema: A única maneira que eu posso de lidar com isso é ter um interior try / catch aninhado do principal try / catch para tentar mover o arquivo, dessa forma, se o movimento falhar, outra exceção é lançada. Eu sei que eu posso fazer o meu melhor para ter certeza de que o diretório existe, os direitos são dadas, mas uma vez que é uma unidade de rede ... Eu só sei um erro está prestes a acontecer em algum momento.

Exemplo

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

Na verdade o que saiu ainda mais horrível do que o que eu estava pensando que seria parecido.

Agora eu sei que eu estou fazendo algo errado. Como devo realmente estar tentando lidar com uma possível ocorrendo erro na captura, de modo que eu ainda pode mover arquivos e tentar ligar para o meu caso?

Foi útil?

Solução

Isso tudo parece bom para mim. É perfeitamente razoável ter blocos try catch dentro de um catch. Você pode verificar todas as coisas que você mencionou, mas há sempre a possibilidade de que a rede vai cair ou você simplesmente não será capaz de escrever esse arquivo. O que você faz depois que é até você. Uma mensagem de erro e processamento pausa parece razoável.

Outras dicas

Isso é exatamente como você faria isso quando se utiliza apenas exceções. Você pode considerar o uso de bandeiras, mas que não é melhor, quer:

(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

Não que muito melhor ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top