2

我对 C# 很陌生,所以请耐心等待。我要做的是读取文件夹中的所有文件,找到特定的行(在同一个文件中可能出现多次)并将该输出显示在屏幕上。

如果有人能指出我需要使用哪些方法的方向,那就太好了。谢谢!

4

2 回答 2

7

从...开始

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

于 2012-06-15T23:45:44.577 回答
2

你想在屏幕上得到什么输出?

如果要查找具有给定行的第一个文件,可以使用以下短代码:

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 扩展方法FirstOrDefaultAny找到了第一个具有给定行的文件。

于 2012-06-16T00:02:14.410 回答