我可以打开一个文件流
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);
所以只读共享。
(它在技术上打开一个 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>
(如果文件有数千行并且您一次只需要解析它们,那就更好了)。如果您需要一个数组,请将其命名为 ReadLines("myfile").ToArray()
使用 LINQ。
请注意,从逻辑上讲,如果文件“在(方法的)背后”更改,一切将如何工作是完全不确定的(它可能是技术上定义的,但定义可能相当长和复杂)
关于c# - File.ReadLines 不用加锁吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5338450/