筛选多种文件类型

时间:2010-07-08 02:20:11

标签: c#

使用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.如何将一个数组的内容添加到另一个数组的末尾?这可能吗? (因为那时使用这个方法,我会将文件存储在一个数组中,然后将它们添加到另一个数组中,而不是连续覆盖一个数组)

1 个答案:

答案 0 :(得分:2)

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

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

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

对于非LINQ方法,您可以在AddRange内对数组使用foreachList<FileInfo> fileInfos = new List<FileInfo>(); foreach (string filter in filterSplit) { fileInfos.AddRange(folder1.GetFiles(filter, SearchOption.AllDirectories)); } 方法。

{{1}}