2013-06-24 195 views
1

我有140個目錄正在嘗試處理。根據我的測試,有139個匹配我的文件模式的目錄(* abc.txt)。GetDirectories - 查找與該模式不匹配的目錄

我試圖找到1目錄來驗證其實它沒有* abc.txt在其中。

我該怎麼做?

下面的代碼給我的140個目錄編號:

var directoryCount = from subdirectory in Directory.GetDirectories(paramStartFilePath, "*", SearchOption.AllDirectories) 
        where Directory.GetDirectories(subdirectory).Length == 0 
        select subdirectory; 

我收集的文件的基於關閉這樣的格局:

dirInfoFiles= new DirectoryInfo(startFilePath); 

IEnumerable<FileInfo> listFiles = dirInfoFiles.EnumerateFiles("*abc.txt, System.IO.SearchOption.AllDirectories); 

我怎樣才能找到一個目錄不包含我的.txt文件?

回答

1

如果你想不包含至少一個TXT的文件,該文件名以「ABC」結尾的所有目錄:

IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles.EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories) 
    .Where(d => !d.EnumerateFiles().Any(f => f.Extension.ToUpper() == ".TXT" 
      && f.Name.EndsWith("abc", StringComparison.OrdinalIgnoreCase))); 

或者換句話說是相同的,可能更具可讀性:

IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles 
    .EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories) 
    .Where(d => !d.EnumerateFiles("*abc.txt").Any()); 
2

坦克通過村莊的方式總是運行:只要列舉*.*,然後排除不匹配的模式。

0

這是我的要求。它返回包含以您正在查找的文本結尾的文件且不區分大小寫的第一個項目(或null)。您可以刪除lambda表達式,使其更具可讀性。

var directory = Directory.GetDirectories((paramStartFilePath, "*", SearchOption.AllDirectories) 
        .FirstOrDefault(x => new DirectoryInfo(x).EnumerateFiles().Any(f => !f.Name.EndsWith("abc.txt",true,CultureInfo.CurrentCulture)));