如何在catch块c#中管理异常?

时间:2015-09-01 08:42:49

标签: c# exception

我有以下代码。

try
{
    int s=10;
    int k=0;
    int stdsd = s / k;
}
catch (DivideByZeroException ext)
{
    FileStream fs = new FileStream(@"C:\temp\data.txt", FileMode.Open);  
    //encountered an exception as file doesn't exist.
}
catch (Exception ex)
{
}
finally
{
    //some code here.
}

在上面的代码中,当出现异常时,它会尝试在catch块中的一个文件中写入它。但是当它试图打开该文件时该文件不存在,所以在这种情况下系统崩溃了。我想在finally块中执行这样的关键代码,但是由于catch块中的异常,它不会进一步到那一行。

我知道我们可以检查文件存在但是我不想检查文件存在检查这里,我想如何在catch块中管理它。 可以请帮助管理catch块中的异常的最佳方法。

4 个答案:

答案 0 :(得分:4)

您无法处理与同一catch语句关联的catch块中的一个try/catch块生成的异常。相反,你需要额外的一个:

catch (DivideByZeroException ext)
{
    try
    {
        FileStream fs = new FileStream(@"C:\temp\data.txt", FileMode.Open);  
    }
    catch (IOException e)
    {
        // Handle the exception here
    }
}

请注意,在打开流时应该使用using语句,这样无论是否稍后抛出异常,您都会自动关闭它。

我还建议直接在catch块中使用这样的代码 - 为了便于阅读,通常catch块应该很短。考虑将所有错误处理功能移动到单独的方法中(或者甚至可能是单独的类)。

答案 1 :(得分:3)

只需使用其他try {} catch {} ...

try { 
    // ...
    try {
        // try opening your file here ...
    } catch (Exception) {
        // ...
    }
} catch (Exception) {
    // ...
}

答案 2 :(得分:0)

如果您不想检查文件是否存在,那么#34;在这里" (在例外情况下),那么你也可以检查存在"那边",即:代码中的早期。

根据我的理解,您要做的是将异常日志写入文件。因此,您可以在代码中更早地配置正确的日志文件处理,最好使用良好的日志文件处理程序。在此之后,您必须在异常处理程序中执行的唯一操作是将异常消息推送到日志处理程序 - 然后将正确地将此信息写入文件。

答案 3 :(得分:0)

异常是任何语言的非常强大的未来,在大多数情况下都是不可忽视的,但如果可能的话尽量避免使用

看看这个

            String File = "File.txt";
            System.IO.FileInfo fileinfo = new System.IO.FileInfo(File);

           if(fileinfo.Exists)
           {
               using (System.IO.FileStream file = new System.IO.FileStream(File, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite))
             {
                 // operation on file here
             }
           }else
           {
               using (System.IO.FileStream file = new System.IO.FileStream(File, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite))
               {
                   // operation on file here now the file is new file 
               }
           }