【问题标题】:Outputting all text file titles to a textbox on Windows Form将所有文本文件标题输出到 Windows 窗体上的文本框
【发布时间】: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"); }

标签: c# winforms search text


【解决方案1】:

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

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

使用StringBuilder 构建您的字符串然后将其分配给文本框可能会更高效。

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

resultsText.Text = sb.ToString();

【讨论】:

    【解决方案2】:

    您必须更改 1 行代码:

    resultsText.Text = file;
    

    到这里:

    resultsText.Text += file;
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-10-23
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        相关资源
        最近更新 更多