私は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++;
}
}
}
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
画面にどのような出力を表示したいですか?
指定された行で最初のファイルを見つけたい場合は、次の短いコードを使用できます。
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
して、特定の行を含む最初のファイルを見つけました。