【问题标题】:Get files in directory with multiple search patterns获取具有多种搜索模式的目录中的文件
【发布时间】:2016-05-09 10:39:09
【问题描述】:

我有一个方法可以在指定目录中获取扩展名为 txt 的文件。除了这些文件,我还想获取扩展名为pptdocx 等的文件。如何实现?

这是我当前的代码:

private void button2_Click(object sender, EventArgs e){
  listView1.Items.Clear();
  if (textBox1.Text != ""){
    List<string> files = new List<string>();
    files = Directory.GetFiles(textBox1.Text, "*.txt,*.ppt").ToList();
    progressBar1.Maximum = files.Count;
    progressBar1.Value = 0;
    ListViewItem it;
    foreach (var file in files){
      it = new ListViewItem(file.ToString());
      it.SubItems.Add(System.IO.Path.GetFileName(file.ToString()));
      it.SubItems.Add(System.IO.Path.GetExtension(file.ToString()));
      listView1.Items.Add(it);
      progressBar1.Increment(1);
    }
  } else
    MessageBox.Show("Select directory first");
}

【问题讨论】:

  • 它有效,但不能以什么方式满足您的需求?尝试更具体。你得到什么?它与您的期望/需要有何不同?
  • 使用 Linq : files = Directory.GetFiles("textBox1.Text", ".").Where(x => x.EndsWith(".txt") | | x.EndsWith(".ppt")).ToList();
  • 你为什么要问这个问题两次? stackoverflow.com/questions/37113147/…

标签: c# io


【解决方案1】:

您的问题不清楚,但我知道您想从指定路径获取具有不同扩展名的文件。我们不能使用 Directory.GetFiles("c://etc.", "*.txt") 来执行此操作,因为它适用于单个搜索模式。你可以用这个,

string[] Extensions = {"*.txt", "*.doc", "*.ppt"};
foreach(var ext in Extensions)
{
    GetFiles(ext);
}
private void GetFiles(string ext)
{
    List<string> files = new List<string>();
    files = Directory.GetFiles("c:/something", ext).ToList();
    // Something you want to do with these files.
}

【讨论】:

    【解决方案2】:
    files = Directory.GetFiles(@textBox1.Text, "*.txt").ToList();
    files.AddRange(Directory.GetFiles(@textBox1.Text, "*.docx").ToList());
    files.AddRange(Directory.GetFiles(@textBox1.Text, "*.ppt").ToList());
    

    另外,您应该考虑检查来自 textBox1 的路径的有效性,如下所示:

    if (!Directory.Exists(@textBox1.Text))
    {
       MessageBox.Show("invalid folder");
       return;
    }
    

    【讨论】:

    • 如果要添加的集合中没有任何内容,AddRange 不会抛出异常吗?可能需要考虑到这一点
    • 不,它不会抛出异常。 Directory.GetFiles 将返回空 List 集合,然后将其“添加”。但是textBox1.Text 的内容可以:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多