【问题标题】:Does ReadAllLines() function have built in try-catch?ReadAllLines() 函数是否内置了 try-catch?
【发布时间】:2011-09-28 10:39:39
【问题描述】:

据我了解,ReadAllLines 会打开一个文件,然后返回该文件中的所有行,然后关闭该文件/流。现在我有了这段代码:

try
{
    string[] lines = File.ReadAllLines(path);
}
catch(IOException)
{
    Console.WriteLine("File doesnt exist in : " + path);
}

我这样做是为了如果path 目录中的文件不存在,它会抛出错误消息。我的问题:有必要吗?由于我不知道 Microsoft 是如何实现 ReadAllLines(),我真的不知道它是否已经在函数实现中内置了 try catch..

但是,我可以“猜测”ReadAllLines() 每次完成读取文件流时总是会关闭文件流。这就是我没有运行应该包含在 finally{} 块中的 cleanup 代码的原因。

有人可以解释/给我确认一下吗?任何帮助,将不胜感激。如果问题不清楚,请告诉我。谢谢。

【问题讨论】:

  • 阅读 MSDN 中的文档,通常他们会解释并详细说明抛出了哪些异常以及在哪些情况下以及该方法的行为方式。

标签: c# asp.net exception try-catch


【解决方案1】:

我查看了 ILSpy 中的源代码,看起来它执行以下操作:

[SecuritySafeCritical]
public static string[] ReadAllLines(string path)
{
if (path == null)
{
    throw new ArgumentNullException("path");
}
if (path.Length == 0)
{
    throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
}
return File.InternalReadAllLines(path, Encoding.UTF8);
}

还有InternalReadAllLines方法:

private static string[] InternalReadAllLines(string path, Encoding encoding)
{
List<string> list = new List<string>();
using (StreamReader streamReader = new StreamReader(path, encoding))
{
    string item;
    while ((item = streamReader.ReadLine()) != null)
    {
        list.Add(item);
    }
}
return list.ToArray();
}

【讨论】:

    【解决方案2】:

    阅读 File.ReadAllLines() 方法的文档会有所帮助 - 所有可能引发的异常都列在那里 - 这包括 IOExceptionFileNotFoundException

    【讨论】:

      【解决方案3】:

      文档here 列出了ReadAllLines 在各种情况下将抛出的许多异常。列出的所有异常都会导致文件无法打开,因此不需要清理 finally 块中的代码,但您肯定希望捕获上下文中可能发生的任何异常。

      【讨论】:

        【解决方案4】:

        是的,如果未找到等,它确实会引发异常。只需键入 File.ReadAllLines,intellisense 就会向您显示该方法可能引发的所有异常。是的,它确实会清理干净,如果您担心的话,您无需担心内部流等。

        【讨论】:

          【解决方案5】:

          如果文件在该路径的末尾不存在,或者文件被锁定等,那么是的,File.ReadAllLines(path) 将抛出异常,您可以假设使用 try catch 块是正确的。

          【讨论】:

            【解决方案6】:

            是的,文档说它会抛出:

            http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx

            【讨论】:

              【解决方案7】:

              您可以查看该方法的 msdn 文档,其中包含对将引发哪些异常以及在什么情况下引发的说明:

              http://msdn.microsoft.com/en-us/library/s2tte0y1.aspx

              例外 参数异常
              path 是一个长度为零的字符串,仅包含空格,或者包含一个或多个由 InvalidPathChars 定义的无效字符。

              FileNotFoundException
              未找到路径中指定的文件。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2012-12-22
                • 1970-01-01
                • 1970-01-01
                • 2014-04-18
                • 1970-01-01
                • 1970-01-01
                • 2021-11-13
                • 2011-07-06
                相关资源
                最近更新 更多