ReadAllLines()函数是否内置了try-catch?

时间:2011-07-04 23:36:05

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

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

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

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

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

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

7 个答案:

答案 0 :(得分:3)

我查看了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();
}

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

是的,如果没有找到等,它会抛出异常。只需键入File.ReadAllLines,intellisense将显示该方法可能抛出的所有异常。是的,它确实清理了,如果你担心的话,你不需要担心内部流等。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

是的,文档说它会抛出:

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

答案 6 :(得分:1)

您可以查看该方法的msdn文档,其中包括将抛出异常的说明以及在何种情况下:

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

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

FileNotFoundException异常
找不到路径中指定的文件。