2010-07-08 119 views
2

使用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.如何將一個數組的內容添加到另一個數組的末尾?這可能嗎? (因爲然後使用這種方法,我將把這些文件存儲在一個數組中,然後將它們添加到另一個數組中,而不是連續覆蓋這個數組)

回答

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