C#读取文件内容和查找字符串

标签 c# file

我是 C# 的新手。 我需要在某个目录下打开一堆代码文件,并获取包含一些匹配字符串的特定行。 这是一个简单的问题,我可以使用流阅读器一个一个地打开文件,然后逐行解析它们。 我想知道是否有更有效的方法来做同样的事情。就像我的印象是 Stream 阅读器和逐行读取将是繁重的操作。

最佳答案

已经有一些关于如何获取文件行的​​好帖子,所以我想我会添加一些关于效率的内容。一些人提到了 File.ReadAllLines() 方法。从效率的角度来看,这种方法是有问题的,因为它会一次将整个文件读入内存。此外,它使用数组作为需要连续内存的存储。如果文件足够大,这将导致问题。

读取文件的更有效方法是重复使用 StreamReader.ReadLine 方法。它将一次返回一行,您只需要将您关心的行保留在内存中。将其转换为延迟评估的迭代器也相对容易。

public static IEnumerable<string> ReadLinesEnumerable(string path) {
  using ( var reader = new StreamReader(path) ) {
    var line = reader.ReadLine();
    while ( line != null ) {
      yield return line;
      line = reader.ReadLine();
    }
  }
}

在 LINQ 方面。您可以使用 LINQ 来匹配 ReadAllLines 和 ReadLinesEnumerable 方法,因为它们都返回可枚举的数据类型。例如

var query = from line in ReadLinesEnumerable(@"c:\some\path\file.txt")
            where Regex.IsMatch(line, @"^(\d)+.*$")
            select line;

关于C#读取文件内容和查找字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/792228/

相关文章:

c# - 从函数中提取函数名

c# - 如何在 DataTable 中使用 LINQ?

c++ - Windows 本身有虚拟或临时文件系统吗?

c# - 锁定 AppendAllText 与 TextWriter

c++ - 在 C++ 中部分截断流(fstream 或 ofstream)

c# - 如何从 web.config 中读取 system.web 部分

c# - 用 new 实例化枚举有什么用吗?

c# - WPF 透明文本与不透明背景

python-3.x - 后续搜索特定文件扩展名的目录并执行求和以将它们的内容加在一起

javascript - 如何使用 TypeScript 确定一串代码中有多少 KB?