0

요구 사항 : 오류 (throw 된 예외)에서 처리중인 파일을 오류가있는 파일의 폴더 (app.config 설정)로 이동해야합니다.예외로 파일을 이동하는 방법은 무엇입니까?

문제 : 내가 처리 할 수있는 유일한 방법은 파일을 이동하려고 시도한 주 Try/Catch 안에 중첩 된 Try/Catch를 넣는 것입니다. 이동이 실패하면 다른 예외가 throw됩니다. . 나는 디렉토리가 존재하는지, 권리가 주어 졌는지를 확인하기 위해 최선을 다할 수 있지만, 네트워크 드라이브이기 때문에 ... 나는 어떤 점에서 오류가 발생한다는 것을 알고있다.

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 

예는 실제로는 나는 그것이 같을 것이다 생각보다 훨씬 더 무서운 나왔다.

이제 내가 잘못하고있는 것을 알고 있습니다. catch에서 발생 가능한 오류를 어떻게 처리해야합니까? 그럼에도 파일을 이동하고 이벤트를 호출 할 수 있습니까?

답변

3

모든 것이 나에게 잘 어울립니다. 캐치 안에 블록을 잡아 당기는 것이 가장 이상적입니다. 언급 한 모든 것을 확인할 수는 있지만 네트워크가 다운되거나 항상 그 파일을 쓸 수없는 가능성이 항상 있습니다. 그 후에 당신이하는 일은 당신에게 달려 있습니다. 오류 메시지와 일시 중지 처리가 합리적인 것처럼 보입니다.

+0

. 고마워, 그런 식으로하는 것이 잘못한 것처럼 보였지만 왜 더 나은 것을 생각할 수 없는지 설명합니다. – RiddlerDev

1

예외를 사용할 때와 정확히 동일합니다. 당신은 플래그를 사용하는 것이 좋습니다,하지만하지 더 나은 중 하나

(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 

하지 않는 것이 훨씬 더

... 제법

+0

나는 덜 깨끗하다고 ​​말할 것이다. – stimms

+0

물론 그렇습니다. 그래서 중첩 된 예외 접근 방식이 당신이 올바르게 수행하는 방법이라고 말한 것입니다. –

관련 문제