c# - File.ReadLines 不用加锁吗?

标签 c# file stream io 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);

所以只读共享。

(它在技术上打开一个 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/

相关文章:

javascript - 如何在 1 分钟后使用 javascript 刷新 Repeater?

c# - 如何从 Visual Studio C#.net 创建一个文本文件 (.txt) 与自动换行属性禁用?

file - 重命名和重新创建文件时出现奇怪的时间戳重复

c - stderr 和 stdout - 未缓冲与缓冲?

node.js - 无法触发 Node 流的完成事件

c# - 使用 C# 的 PDF 和图形

c# - 如何确定日期是否位于当前周日期之间?

c - 打开文件时出现段错误

ruby-on-rails - 如何检查子链接文件是否存在

haskell - 未装箱向量中没有与 unsafeUpdate_ 进行流融合