我可以用
打开一个FileStreamnew FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
不锁定文件。
我可以对File.ReadLines(string path)
做同样的事情吗?
答案 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()
将锁定文件,直到文件完成。