这里是 C# 新手,在您阅读下文之前,我相信最重要的一条信息可能是我正在远程机器上搜索网络上的共享文件夹,但这仍然不能回答我的问题,为什么要调试模式工作正常。共享文件夹的文件路径位于表单上的文本框中,如下所示:
\\MachineName\jobFolder
所以关于我的问题:
我有一个充满 excel 文件的文件夹,我自己和其他人有时需要使用具有 1 到 5 个条件的 windows 窗体来搜索这些文件,每个“条件”只是一个不同的文本字符串来缩小搜索范围。我只在下面显示了 1 个文本字符串条件,因为其余的都是重复的,如果我能提供帮助,我不想粘贴一堵代码墙。
我知道有更好的方法来搜索 .xls 文件,但我不需要任何花哨的东西,只需要原始文本搜索。我也知道 Windows 搜索也可以做到这一点,但这是一个具有其他功能的表单。
问题,让我感到困惑的是它在调试模式下工作正常,但在正常运行可执行文件时只能通过大约 5,000 个总文件中的前 1/5 左右的文件,有什么想法吗?它没有出现错误,它只是完成,好像一切都按计划进行。这是代码:
string[] words = textBox1.Text.ToUpper().Split(',');
if (words.Length == 1)
{
foreach (string FileStr in Directory.GetFiles(textBox2.Text, "*.xls" ))
{
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
}
else
{
try
{
if ((File.ReadAllText(FileStr).ToUpper().IndexOf(words[0]) >= 0))
{
Action action = () => listBox1.Items.Add(Path.GetFileName(FileStr));
listBox1.Invoke(action);
}
}
catch (Exception)
{
MessageBox.Show("error");
}
}
}
}
如果相关,我的工作人员已完成:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
button2.Enabled = true;
searchButton.Enabled = true;
searchButton.Text = "Search";
button4.BackColor = SystemColors.Control;
searchButton.BackColor = SystemColors.Control;
MessageBox.Show("Error: " + e.Error.Message);
textBox1.Enabled = true;
}
else if (e.Cancelled)
{
button2.Enabled = true;
searchButton.Enabled = true;
searchButton.Text = "Search";
button4.BackColor = SystemColors.Control;
searchButton.BackColor = SystemColors.Control;
MessageBox.Show("canceled.", "Canceled");
textBox1.Enabled = true;
}
else
{
button2.Enabled = true;
searchButton.Enabled = true;
searchButton.Text = "Search";
button4.BackColor = SystemColors.Control;
searchButton.BackColor = SystemColors.Control;
MessageBox.Show("Search Complete", "Complete");
textBox1.Enabled = true;
}
}