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++;
         }
    }
}

Nick が以下で指摘したように、Task Library を使用して検索を並列化できます。'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 拡張メソッドFirstOrDefaultを使用Anyして、特定の行を含む最初のファイルを見つけました。

于 2012-06-16T00:02:14.410 に答える