0

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

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

4 回答 4

1

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

查看文档并查看保存代码中使用的所有方法都可以引发哪些异常。考虑一下它们在您的特定算法中的真正含义,以及如何将异常转换为用户友好的错误消息。

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

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

于 2012-12-11T21:49:34.790 回答
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 ). 错误检查总是比异常处理更受欢迎......

于 2012-12-11T21:24:58.383 回答
0

你可以这样做:

try{}

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

}
}
于 2012-12-11T21:25:13.010 回答
0

基于异常的工作流管理是一个建议的指导方针,如果不是唯一可能的话,在处理IO操作的情况下,so 文件也是。很多时候,没有其他方法可以处理您的程序工作流,如果不是在处理 IO 工件时通过预期的异常处理。

在您的情况下,我会添加catch所有预期的异常,而对于其他人来说,只会离开堆栈。

希望这可以帮助。

于 2012-12-11T21:26:53.800 回答