微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

遇到处理Streamreaderexception的麻烦

我有一些StreamReader麻烦,我有一个设置文件,我保存设置。我想打开和closures文件的方式,我也可以处理exception。

文件无法加载时,我想现在返回false。

我创build了一个为我加载文件函数

private bool LoadSettingsFile(out StreamReader SettingsFile) { try { SettingsFile = new StreamReader("Settings.txt"); return true; } catch { //Going to solve the exception later,but if I can't I want to return false. SettingsFile = new StreamReader(); //You need to assign StreamReader,but you need to open a file for that. //'System.IO.StreamReader' does not contain a constructor that takes 0 arguments return false; } }

我这样调用函数

如何使用lseek检查文件中的当前偏移位置?

任何人都可以推荐Windows的磁盘I / O基准testing软件吗?

正确的方法提前中止BeginRead和BeginWrite?

有谁知道一些java类返回一个操作系统友好的文件名?

IOError写入文件

StreamReader SettingsFile; if (!LoadSettingsFile(out SettingsFile)) return false;

我怎样才能避免或解决这个问题?

文件重命名文件存在检查返回UNC共享上不正确的值

为什么以下打印“资源暂时不可用”?

为什么要在Linux上挂载文件

如何阅读Windows的.exe文件版本?

非阻塞mlock()

如果你无法打开文件,你为什么要返回一个StreamReader实例? 当然,你会想要返回null。 而且,在你的异常处理中做一个全面的,绝对不是一个好主意,比如更具体一些

private bool LoadSettingsFile(out StreamReader settingsFile) { try { settingsFile = new StreamReader("Settings.txt"); return true; } catch (IOException) // specifically handle any IOExceptions { settingsFile = null; return false; } }

这可以说是不好的做法,一般来说,.NET代码倾向于“抛出异常”而不是“返回失败”。 其原因是,如果你“回归失败”,你依靠你的代码的消费者来认识到这一点,并做一些事情。 如果抛出一个异常,并且代码的使用者忽略它,那么应用程序将会失败,这通常比继续处于未定义状态更令人满意。

在你的情况下,问题是你不得不分配给你的out参数,即使没有明智的价值分配。 一个明显的建议是分配null而不是试图伪造一个StreamReader 。 或者,您可以创建一个空的MemoryStream并返回一个读取器,但是这会花费很长时间来掩盖变量在故障情况下没有意义的事实, 不应该被设置。

最终,我建议你允许异常冒泡,而不是返回一个bool来指示失败 – 或者, 返回 StreamReader成功,在失败的情况下返回null 。

进入Try / Catch块之前,只需设置SettingsFile = null即可。 大概是通过返回false来处理这个情况,所以SettingsFile永远不会被使用。 所以你的代码看起来像这样:

private bool LoadSettingsFile(out StreamReader SettingsFile) { SettingsFile = null; try { SettingsFile = new StreamReader("Settings.txt"); return true; } catch { //Handle Exception Here return false; } }

你可以试试

private StreamReader LoadSettingsFile() { try { return new StreamReader("Settings.txt"); } catch { return null; } }

接着

StreamReader sr = LoadSettingsFile(); if (sr == null) return false;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐