【发布时间】:2013-08-02 14:00:12
【问题描述】:
有点卡在我正在尝试编写的一段代码上,如果有人知道我哪里出错了,希望能得到帮助!
我有一个简单的 Windows 窗体,其中有一个文件夹浏览器。用户将浏览到一个文件夹,然后将搜索其中的任何子文件夹以查找标题中包含“已通过”一词的文本文件(而不是文本文件本身的正文)。将有来自许多不同文件夹的带有“已通过”的文件,我希望应用程序的功能能够搜索所有子文件夹并返回名称中包含此名称的所有文件。
目前我有以下代码:
private void searchButton_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("Please enter a path");
}
else
{
string[] allFiles = Directory.GetFiles(textBox1.Text, "*Passed*.*", SearchOption.AllDirectories);
string name = resultsText.Text;
foreach(string file in allFiles)
{
if (file.Contains("Passed"))
{
resultsText.Text = file;
}
}
}
}
但是,在 resultsText texbox 中,它只返回 1 个值。有多个标题中带有“已通过”的文件,我想将它们全部打印到此文本框中。有谁知道我哪里出错了,为什么我只得到一个文件而不是所有文件?
此外,此方法似乎返回整个文件路径,例如) C:\Program Files\Test\abc\PassedTests.txt - 有谁知道我可以如何修剪完整路径以便它只返回文件名和扩展名?
非常感谢任何帮助!
【问题讨论】:
-
resultsText.Text = file你每次都覆盖它。试试resultsText.Text += file + Environment.NewLine。此外,如果您正在寻找"*Passed*.*",第二次检查if (file.Contains("Passed"))应该是不必要的。 -
你应该检查输入的路径是否有效,否则你会得到一个异常。
var dir = textBox1.Text; if (Directory.Exists(dir)) { resultsText.Text = Directory.GetFiles(dir, "*Passed*.*", SearchOption.AllDirectories).Aggregate(string.Empty, (current, file) => current + file + Environment.NewLine); } else { MessageBox.Show("Please enter a valid path"); }