我正在尝试在包含很多文件夹且名称包含特定字符串的文件夹中搜索文件。
我能够做到,但花了我大约 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秒的时间。
答案 0 :(得分:4)
将搜索与Windows自己的搜索功能进行比较有点无效,因为Windows搜索利用了索引文件系统的优势,而在当前实现中则没有。
但是有个好消息:您也可以这样做。
有几种方法可以达到相似的响应时间,有些更快,有些更精确。
例如,您可以:
我不知道3.是否正在为您工作。 1.可能不合时宜,因为您可能不希望潜在地过时的数据。所以我会选择2,但也要打3。
答案 1 :(得分:2)
尝试使用Directory.GetFiles:
string[] files = Directory.GetFiles(filePath, "*.pdf", SearchOption.AllDirectories);