在Directory.GetFiles()
上将多个文件扩展名设置为searchPattern
的语法是什么?例如,过滤掉扩展名为.aspx和.ascx的文件。
// TODO: Set the string 'searchPattern' to only get files with
// the extension '.aspx' and '.ascx'.
var filteredFiles = Directory.GetFiles(path, searchPattern);
更新:LINQ不是一个选项,它必须是传递到GetFiles
中的searchPattern
,正如问题中所指定的。
发布于 2011-08-12 19:47:40
我相信没有“开箱即用”的解决方案,这是Directory.GetFiles方法的局限性。
不过,编写自己的方法相当容易,下面是一个example。
代码可能是:
/返回给定文件夹中符合给定筛选器的文件名/包含要检索的文件的文件夹/多个用| character / File.IO.SearchOption分隔的文件筛选器,/可以是AllDirectories或TopDirectoryOnly / FileInfo对象的数组,这些对象呈现满足给定筛选器公共string[] getFiles(string SourceFolder,string Filter,System.IO.SearchOption searchOption) /的文件名集合。{ // ArrayList将保存所有文件名ArrayList alFiles =string[] ArrayList();//创建筛选器字符串数组string[] MultipleFilters = Filter.Split('|');//对于每个筛选器,查找匹配文件名alFiles.AddRange(Directory.GetFiles(SourceFolder,(MultipleFilters中的string FileFilter ){ //将找到的文件名添加到数组列表alFiles.AddRange(Directory.GetFiles(SourceFolder,FileFilter,FileFilter));} //返回相关文件名的字符串数组string[](string[])alFiles.ToArray(alFiles.ToArray (string ));}
发布于 2011-08-12 19:47:32
var filteredFiles = Directory
.GetFiles(path, "*.*")
.Where(file => file.ToLower().EndsWith("aspx") || file.ToLower().EndsWith("ascx"))
.ToList();
编辑2014-07-23
您可以在.NET 4.5中执行此操作以获得更快的枚举速度:
var filteredFiles = Directory
.EnumerateFiles(path) //<--- .NET 4.5
.Where(file => file.ToLower().EndsWith("aspx") || file.ToLower().EndsWith("ascx"))
.ToList();
发布于 2015-05-07 00:23:11
我喜欢这种方法,因为它是可读性的,并且避免了目录的多次迭代:
var allowedExtensions = new [] {".doc", ".docx", ".pdf", ".ppt", ".pptx", ".xls", ".xslx"};
var files = Directory
.GetFiles(folder)
.Where(file => allowedExtensions.Any(file.ToLower().EndsWith))
.ToList();
https://stackoverflow.com/questions/7039580
复制相似问题