将所有文本文件标题输出到Windows窗体上的文本框中

时间:2013-08-02 14:00:13

标签: c# winforms search text

我正试图写一段代码,如果有人知道我哪里出错了,那就希望有所帮助!

我有一个简单的Windows窗体,我有一个文件夹浏览器。用户将浏览到文件夹,然后将搜索其中的任何子文件夹以查找标题中具有单词“Passed”的文本文件(不是文本文件本身的主体)。从许多不同的文件夹中都会有“通过”的文件,我希望应用程序的功能能够搜索所有子文件夹并返回其名称中包含此文件的所有文件。

目前我有以下代码:

    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个值。标题中有多个“Passed”文件,我想将它们全部打印到此文本框中。有谁知道我可能出错的地方以及为什么我只得到一个文件而不是所有文件?

此外,此方法似乎返回整个文件路径,例如) C:\ Program Files \ Test \ abc \ PassedTests.txt - 有没有人知道如何修剪完整路径以便它只返回文件名和扩展名?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

您需要附加文字。目前,您使用resultsText.Text = file;覆盖了之前的值。

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

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

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

resultsText.Text = sb.ToString();

答案 1 :(得分:0)

您必须更改1行代码:

resultsText.Text = file;

对此:

resultsText.Text += file;

+会附加文本而不会覆盖它。

答案 2 :(得分:0)

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