我有一些StreamReader麻烦,我有一个设置文件,我保存设置。我想打开和closures文件的方式,我也可以处理exception。
当文件无法加载时,我想现在返回false。
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?
IOError写入文件时
StreamReader SettingsFile; if (!LoadSettingsFile(out SettingsFile)) return false;
我怎样才能避免或解决这个问题?
为什么以下打印“资源暂时不可用”?
为什么要在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] 举报,一经查实,本站将立刻删除。