在大量文本文件中搜索特定文本,并在文本框中显示它们

本文关键字:文本 显示 文件 搜索 | 更新日期: 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.EnumerateFilesFile.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);

我也只在用户显式触发它时进行搜索,因此在单击按钮时进行搜索,而不是在文本更改时进行搜索。