我对 C# 很陌生,所以请耐心等待。我要做的是读取文件夹中的所有文件,找到特定的行(在同一个文件中可能出现多次)并将该输出显示在屏幕上。
如果有人能指出我需要使用哪些方法的方向,那就太好了。谢谢!
我对 C# 很陌生,所以请耐心等待。我要做的是读取文件夹中的所有文件,找到特定的行(在同一个文件中可能出现多次)并将该输出显示在屏幕上。
如果有人能指出我需要使用哪些方法的方向,那就太好了。谢谢!
从...开始
const string lineToFind = "blah-blah";
var fileNames = Directory.GetFiles(@"C:\path\here");
foreach (var fileName in fileNames)
{
int line = 1;
using (var reader = new StreamReader(fileName))
{
// read file line by line
string lineRead;
while ((lineRead = reader.ReadLine()) != null)
{
if (lineRead == lineToFind)
{
Console.WriteLine("File {0}, line: {1}", fileName, line);
}
line++;
}
}
}
正如尼克在下面指出的那样,您可以使用任务库进行并行搜索,只需将 'foreach' 替换为 Parallel.Foreach(filesNames, file=> {..});
Directory.GetFiles:http: //msdn.microsoft.com/en-us/library/07wt70x2
StreamReader:http: //msdn.microsoft.com/en-us/library/f2ke0fzy.aspx
你想在屏幕上得到什么输出?
如果要查找具有给定行的第一个文件,可以使用以下短代码:
var firstMatchFilePath = Directory.GetFiles(@"C:\Temp", "*.txt")
.FirstOrDefault(fn => File.ReadLines(fn)
.Any(l => l == lineToFind));
if (firstMatchFilePath != null)
MessageBox.Show(firstMatchFilePath);
我使用Directory.GetFiles
搜索模式来查找目录中的所有文本文件。我使用了 LINQ 扩展方法FirstOrDefault
并Any
找到了第一个具有给定行的文件。