我是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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
就LINQ而言.您可以使用LINQ同时匹配ReadAllLines和ReadLinesEnumerable方法,因为它们都返回可枚举的数据类型.例如
var query = from line in ReadLinesEnumerable(@"c:\some\path\file.txt")
where Regex.IsMatch(line, @"^(\d)+.*$")
select line;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5451 次 |
| 最近记录: |