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内容,并且还取出了很多堆栈跟踪信息。最好从deleteFile. 这也意味着您可以将调用代码更改为 catchIOException而不是 global Exception。通过这样做,您可能会catch为不同的异常设置不同的块,从而允许您以不同的方式对待它们(可能会因一种类型而崩溃,为不同的类型记录错误,向用户显示其他内容的消息等)。

于 2012-12-12T15:46:08.650 回答