File.ReadLines没有锁定它?

时间:2011-03-17 11:35:47

标签: c# file stream io filestream

我可以用

打开一个FileStream
new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

不锁定文件。

我可以对File.ReadLines(string path)做同样的事情吗?

2 个答案:

答案 0 :(得分:34)

否......如果您使用Reflector查看,您会看到最后File.ReadLines打开FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 0x1000, FileOptions.SequentialScan);

所以只读分享。

(从技术上讲,如上所述,StreamReader打开FileStream

我会补充说,制作一个静态方法似乎是孩子的游戏:

public static IEnumerable<string> ReadLines(string path)
{
    using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 0x1000, FileOptions.SequentialScan))
    using (var sr = new StreamReader(fs, Encoding.UTF8))
    {
        string line;
        while ((line = sr.ReadLine()) != null)
        {
            yield return line;
        }
    }
}

这会返回IEnumerable<string>(如果文件有数千行,你只需要一次解析一个就更好了)。如果需要数组,请使用LINQ将其称为ReadLines("myfile").ToArray()

请注意,从逻辑上讲,如果文件“在它的后面(方法)后面改变”,那么一切如何工作都是非常不确定的(它可能是技术上定义的,但定义可能很长很复杂)< / p>

答案 1 :(得分:2)

File.ReadLines()将锁定文件,直到文件完成。