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);
4

1 に答える 1

2

何もする必要はありません。例外はそれ自体ですべてバブルします。それが彼らの働きです。

呼び出しコードの前後にTry/を追加するだけです。Catch

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

メソッドで新しい例外をキャッチして再スローする必要はありません(実際には多少の害もあります)deleteFile。例外のタイプをより具体的で有益なものIOExceptionから表現力の低いものに変更Exceptionし、スタックトレース情報も大量に取得しています。そのtry/catchをから完全に削除する方がよいでしょうdeleteFileIOExceptionまた、グローバルの代わりにキャッチするように呼び出し元のコードを変更できることも意味しますException。これを行うことcatchで、例外ごとに異なるブロックを作成できる可能性があり、それらを異なる方法で処理できるようになります(おそらく、あるタイプでクラッシュしたり、別のタイプのエラーをログに記録したり、他の何かについてユーザーにメッセージを表示したりします)。

于 2012-12-12T15:46:08.650 に答える