2012-12-12 2 views
0

클래스에서 내 예외를 가져 와서 Windows 오류로 표시하려면 어떻게합니까? 내 양식에서내 클래스의 예외를 내 양식에 전달하십시오.

public class Editcap 
{ 
    private string _newFileName; 

    public void convertFileToLibpcap(string filePath) 
    { 
     FileInfo fileInfo = new FileInfo(filePath); 
     _newFileName = fileInfo.FullName.Replace(fileInfo.Extension, "_new") + ".pcap"; 
     invokeProcess(WiresharkProcesses.Editcap, string.Format("{2}{0}{2} -F libpcap {2}{1}{2}", fileInfo.FullName, _newFileName, "\"")); 
     deleteFile(filePath); 
    } 

    private void deleteFile(string filePath) 
    { 
     try 
     { 
      File.Delete(filePath); 
     } 
     catch (Exception e) 
     { 
      throw new Exception(e.Message); 
     } 
    } 

    public string getNewFileName() 
    { 
     return _newFileName; 
    } 
} 

:

기능은 다른 확장자를 가진 새 파일을 만들고 이전 파일을 삭제해야

내 클래스입니다. 그것을 삭제하지 않을 경우, 나는 팝업 창에서 메시지 오류를 표시 할

Editcap editpcap = new Editcap(); 
editpcap.convertFileToLibpcap(file.FullName); 
+1

O_o ​​** 예외를 다시 발생시키지 마십시오. 당신은 정보를 잃어 가고 있습니다. 'catch' 블록에서 _business relevance_로 아무것도하지 않는다면, 예외를 잡아 내지 마십시오. – DHN

답변

2

당신은 아무것도 할 필요가 없습니다 예외는 버블 링까지 모두 그 자체에; 그것은 그들이 일하는 방식입니다.

그냥 호출 코드 주위에 Try/Catch을 추가 : 다시 던지는 당신의 deleteFile 방법에 새로운 예외를 다음 잡기에 필요 (그리고 사실 일부 해가) 없습니다

try 
{ 
    Editcap editpcap = new Editcap(); 
    editpcap.convertFileToLibpcap(file.FullName); 
} 
catch(Exception e) 
{ 
    MessageBox.Show("There was an error deleting the file."); 
} 

하는 것으로. 예외의 유형을보다 구체적이고 유익한 IOException에서 덜 표현적인 Exception으로 변경하면 스택 추적 정보도 많이 사용하게됩니다. 그저 시도/캐치를 deleteFile에서 완전히 제거하는 것이 좋습니다. 또한 Exception 대신 글로벌 코드 IOException을 호출하도록 호출 코드를 변경할 수 있음을 의미합니다. 이렇게하면 서로 다른 예외에 대해 다른 catch 블록을 잠재적으로 가질 수 있습니다. 한 가지 유형의 오류, 다른 오류의 로그, 사용자에게 다른 메시지 표시 등)를 다르게 처리 할 수 ​​있습니다.

+0

표시된 deleteFile 메서드가 완전히 불필요하다고 말하는 것은 멀었습니다. File.Delete를 호출하면됩니다. 작성된 메소드는 값을 추가하지 않습니다. –

+0

@ChrisDunaway 동의 함. – Servy

+0

클래스에서 deleteFile을 호출 할 필요가 없습니까? – user1710944

관련 문제