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);

所以只读共享。

(它在技术上打开了一个带有FileStreamStreamReader ,如上所述)

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

 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()将锁定文件,直到它完成。