2015-04-15 98 views
2

我想要获取具有特定扩展名但跳过某些文件夹的所有文件的所有路径。我使用这个工作正常但不排除指定文件夹的代码。搜索某些文件的所有子目录,跳过一些文件夹

public static IEnumerable<string> EnumerateFiles(string path, string searchPattern, SearchOption searchOpt) 
{ 
    try 
    { 
     var dirFiles = Enumerable.Empty<string>(); 
     if (searchOpt == SearchOption.AllDirectories) 
     { 
      dirFiles = Directory.EnumerateDirectories(path) 
       .Where(y => !y.Contains("Program Files") || !y.Contains("Windows")) 
       .SelectMany(x => EnumerateFiles(x, searchPattern, searchOpt)); 
     } 
     return dirFiles.Concat(Directory.EnumerateFiles(path, searchPattern)); 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     return Enumerable.Empty<string>(); 
    } 
} 

但基于我的其他问题的研究,这正是我应该做的。请问我哪里错了?

用法是:

var enumerable = EnumerateFiles(@"C:\", "*.jpg", SearchOption.AllDirectories); 
+0

那么你的问题到底是什么?在我们可以告诉你在做什么错误之前,我们需要知道发生了什么问题。 – Jodrell

回答

5

我猜你想exlude Program FilesWindows,所以使用&&代替||

.Where(y => !y.Contains("Program Files") && !y.Contains("Windows")) 
+0

谢谢。愚蠢的我,有时你会如此盲目! – nik

相关问题