0

有点卡在我正在尝试编写的一段代码上,如果有人知道我哪里出错了,希望能得到帮助!

我有一个简单的 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 - 有谁知道我可以如何修剪完整路径,以便它只返回文件名和扩展名?

任何帮助是极大的赞赏!

4

3 回答 3

0

您需要附加文本。目前,您正在使用resultsText.Text = file;.

 if (file.Contains("Passed"))
 {
    resultsText.AppendText(file);
 }

使用 a 构建字符串StringBuilder然后将其分配给 TextBox 可能会更高效。

StringBuilder sb = new StringBuilder();
foreach(string file in allFiles)
{
  if (file.Contains("Passed"))
  {
     sb.Append(file);
  }
}

resultsText.Text = sb.ToString();
于 2013-08-02T14:01:50.320 回答
0

您必须更改 1 行代码:

resultsText.Text = file;

对此:

resultsText.Text += file;

+ 将附加文本而不是覆盖它。

于 2013-08-02T14:02:06.623 回答
0

这是你第二个问题的答案。试试这个只获取文件名 Path.GetFileName(filepath)

于 2013-08-02T14:14:12.667 回答