筛选多个文件类型

问题描述:

使用GetFiles函数,我该如何去过滤两个(或更多)文件类型?筛选多个文件类型

目前我正在使用的代码如下:

  folderlabel1.Text = folderBrowserDialog1.SelectedPath; //store 
      string extensions = "*.bsc>*.bs2"; 
      string[] filterSplit = extensions.Split('>'); 
      int filtercount = filterSplit.Length; 
      int count = 0; 
      listBox1.Items.Clear(); 
      folder1 = new DirectoryInfo(Path.GetFullPath(@folderlabel1.Text)); 
      for (count = 0; count < filtercount; count++) 
      { 
       fileEntries1 = folder1.GetFiles(filterSplit[count], SearchOption.AllDirectories); 
      } 
      foreach (FileInfo x in fileEntries1) 
      { 
       listBox1.Items.Add(x); //...add to folder display 
      } 

所以我想筛选出两个* .BSC和* .bs2文件类型......但显然,它的方式在这里完成只会将第二个文件类型文件复制到数组中的第一个文件类型上。 我在想: 1.如果有更好的方法来做到这一点 2.如何将一个数组的内容添加到另一个数组的末尾?这可能吗? (因为然后使用这种方法,我将把这些文件存储在一个数组中,然后将它们添加到另一个数组中,而不是连续覆盖这个数组)

您可以使用SelectMany扩展方法来对付filterSplit数组来抓取文件为每个给定的扩展。

var fileEntries1 = filterSplit.SelectMany(filter => folder1.GetFiles(filter, SearchOption.AllDirectories)); 

这将创建一个IEnumerable<FileInfo>,然后您可以使用它分配给您的列表框。

对于非LINQ方法,可以使用和AddRange方法对foreach对阵列。

List<FileInfo> fileInfos = new List<FileInfo>(); 

foreach (string filter in filterSplit) 
{ 
    fileInfos.AddRange(folder1.GetFiles(filter, SearchOption.AllDirectories)); 
} 
+0

** var **不是一种类型。它是一个关键字,可用于缩写也包含分配的局部变量声明。它从分配给它的表达式中推断变量的类型。因此,而不是写** StringBuilder sb = new StringBuilder()**,您可以编写** var sb = new StringBuilder()**。它只不过是一种速记,通常称为“合成糖”。 – harpo 2010-07-08 02:39:58

+0

恩......谢谢?这难道还是宏观? – 2010-07-08 02:44:54

+0

感谢大家,我明白了! var是一段有趣的知识。 – rar 2010-07-08 03:51:03