WPF
指定されたディレクトリ内のすべてのファイルを列挙し、特定の文字列が存在するかどうかを確認する必要がある小さなアプリケーションがあります。これは検索方法です:
private void btnSearch_Click_1(object sender, RoutedEventArgs e)
{
Thread t = new Thread(()=>search(@"c:\t", "url", true));
t.Start();
}
private void search(string path, string textToSearch, bool ignoreCase)
{
foreach (string currentFile in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories))
{
int lineNumber = 0;
foreach (string line in File.ReadLines(currentFile))
{
lineNumber++;
if (line.Contains(textToSearch))
{
lbFiles.Dispatcher.BeginInvoke((Action)(() =>
{
//add the file name and the line number to a ListBox
lbFiles.Items.Add(currentFile + " " + lineNumber);
}));
}
}
}
}
私の問題は、指定された文字列がファイル内で複数回見つかった場合、行番号はすべての出現で後者になることです。次の行を含むテキスト ファイルの場合:
abcd
EFG
url
hijk123
url
は次のlistbox
ようになります。
ブレークポイントを使用してコードをステップ実行すると、検索メソッドからステップアウトした直後に、BeginInvoke
宣言に「ジャンプ」して戻ることがわかります。
お知らせ下さい。
ありがとう