File.ReadLines没有锁定它?
我可以打开一个FileStream
new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
没有锁定文件。
我可以用File.ReadLines(string path)
做同样的事情吗?
不…如果你看一下Reflector,你会看到最后File.ReadLines
打开一个FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 0x1000, FileOptions.SequentialScan);
所以只读共享。
(它在技术上打开了一个带有FileStream
的StreamReader
,如上所述)
我将补充说,制作静态方法似乎是孩子的游戏:
public static IEnumerable 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
(如果文件有数千行,你只需要一次解析一个就更好了)。 如果需要一个数组,请使用LINQ将其称为ReadLines("myfile").ToArray()
。
请注意,从逻辑上讲,如果文件“在它的后面(方法)后面改变”,那么一切如何工作都是非常不确定的(它可能是技术上定义的,但定义可能很长很复杂)
File.ReadLines()
将锁定文件,直到它完成。