2015-04-15 89 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

相關問題