以更好的方式处理异常文件

时间:2012-12-11 21:21:06

标签: c# exception-handling

我有这个代码用于保存到文件。

string filePath = Path.Combine(Path.GetTempPath(), "ConnectFour.txt");

try
{       
using (StreamWriter myFile = File.CreateText(filePath))
{
  // saving code
}

}catch (IOException){
    MessageBox.Show("There was an error saving this game!", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);

} catch (Exception){
    MessageBox.Show("There was an error saving this game!", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
}

使用文件处理时是否有更好的方法来处理异常?可能会捕获更多特定的异常,如FileNotFound?您有什么推荐的吗?我问这个,因为当我在另一台计算机上使用我的应用程序的可执行文件时,我收到了消息框(异常被捕获),我不知道它是什么!此异常并未显示在我拥有此应用程序的每台计算机上,因此更难以弄明白!

4 个答案:

答案 0 :(得分:1)

为什么不使用抛出的异常并显示消息:

}
catch( IOException e )
{
   MessageBox.Show("There was an error saving this game: " + e.Message
                    , "ERROR"
                    , MessageBoxButtons.OK
                    , MessageBoxIcon.Exclamation
                    , MessageBoxDefaultButton.Button1);
}

如果文件必须在您的操作之前存在,您可以执行File.Exists( file )。 错误检查始终优先于异常处理......

答案 1 :(得分:1)

作为一般规则,您通常不应该捕获每个异常(通过编写catch(Exception)),但只能捕获那些您可以在此特定点处理的异常。

查看文档,了解保存代码中使用的所有方法可以抛出哪些异常。想想在特定算法的情况下它们的真正含义以及如何将异常转换为用户友好的错误消息。

例如,UnauthorizedAccessException和FileNotFoundException是非常不同的东西。如果您只是写“发生错误”,则用户无法理解错误。

考虑记录异常以获取有用的调试信息。

答案 2 :(得分:0)

你可以这样做:

try{}

catch(exception ex){
if(ex is IOException){
messagebox.show("Your Specific Message");
//and do others like this

}
}

答案 3 :(得分:0)

基于异常的工作流管理是建议的指南,如果不是唯一可行的,在处理IO操作的情况下也是如此。在处理IO工件时,通常没有其他方法可以处理您的程序工作流,如果不是通过预期的异常处理。

在您的情况下,我会在所有预期的例外添加catch,而其他人只会离开去堆栈。

希望这有帮助。