在大量文本文件中搜索特定文本,并在文本框中显示它们
本文关键字:文本 显示 文件 搜索 | 更新日期: 2023-09-27 18:07:07
我试图从特定目录搜索许多文本文件,然后textchanged事件在所有文件中查找文本,并仅在屏幕上显示包含该文本的行。
当前正在工作,但太慢了。我张贴一个功能,搜索文本和显示在列表框。有什么最有效的方法能让它工作得快一点呢?
listBox2.Items.Clear();
ArrayList lines = new ArrayList();
if (txtfile.Count > 0)
{
for (int i = 0; i < txtfile.Count; i++)
{
lines.AddRange((File.ReadAllLines(Path.Combine(path, txtfile[i].ToString()))));
}
for (int i = 0; i < lines.Count; i++)
{
if(lines[i].ToString().IndexOf(txt,StringComparison.InvariantCultureIgnoreCase)>=0)
{
listBox2.Items.Add(lines[i].ToString());
}
}
}
您正在搜索多少个文件?您总是可以为它们建立索引,将内容存储在SQL数据库中,当然还可以使用Parallel。
Parallel.For(1, 1000, i =>
{
//do something here.
}
);
我将使用Directory.EnumerateFiles
和File.ReadLines
,因为它们占用的内存较少:
var matchingLines = Directory.EnumerateFiles(path, ".txt", SearchOption.TopDirectoryOnly)
.SelectMany(fn => File.ReadLines(fn))
.Where(l => l.IndexOf(txt, StringComparison.InvariantCultureIgnoreCase) >= 0);
foreach (var line in matchingLines)
listBox2.Items.Add(line);
我也只在用户显式触发它时进行搜索,因此在单击按钮时进行搜索,而不是在文本更改时进行搜索。