在子目录中搜索特定文件的最快方法

问题描述 投票:-2回答:2

我正在尝试搜索包含大量文件夹且名称包含特定字符串的文件夹中的文件。

我能够做到,但要花费我大约[[2分钟,这对我来说是太多时间。

这是功能:

private void Search() { foreach (var file in Directory.EnumerateFiles(@"P:\system\mail\", "*" + textBox1.Text + "*.pdf*", SearchOption.AllDirectories)) { this.Invoke(new MethodInvoker(delegate () { listBoxControl1.Items.Add(file); })); if (XtraMessageBox.Show("Open the file: " + file + " ?", "Information", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { Process.Start(file); } } }

这是我使用此功能的地方:

private async void simpleButton1_Click(object sender, EventArgs e) { labelControl1.Text = "Status: Please wait . . ."; Stopwatch watch = new Stopwatch(); watch.Start(); await Task.Run(() => Search()); watch.Stop(); labelControl1.Text = "The process done in " + watch.Elapsed.TotalMinutes.ToString() + " minutes."; }

目标是像在Windows中进行搜索一样花费我

4-7秒

c# winforms
2个回答
4
投票
将搜索与Windows自己的搜索功能进行比较在某种程度上是无效的,因为Windows搜索利用了索引文件系统的优势,而在当前实现中则没有。

但是有个好消息:您

可以]也这样做。有几种方法可以达到相似的响应时间,有些更快,有些更精确。

例如,您可以:

    以固定的时间间隔执行搜索并使用结果。缺点:清单可能已过时。或...
  1. 具有对App启动的初始搜索,然后使用FileSystemWatcher来获取有关FileSystem事件(新文件,已删除文件,文件已移动...)的通知,以更新您的内部索引。使用该索引作为您的信息来源。缺点:FSW
  2. 可能
  3. 难以解决。找到一种利用Windows自身索引的方法。看到:
  4. Windows Search Developer's Guide
  5. 我不知道3.是否正在为您工作。 1.可能不受欢迎,因为您可能不希望潜在地过时的数据。所以我会选择2,但也要打3。

2
投票
尝试使用Directory.GetFiles
© www.soinside.com 2019 - 2024. All rights reserved.