我是 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/