1

処理しようとしているディレクトリが 140 あります。私のテストによると、ファイル パターン (*abc.txt) に一致するディレクトリは 139 個あります。

実際に* abc.txtが含まれていないことを確認するために、1つのディレクトリを見つけようとしています。

これどうやってするの?

次のコードは、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 つのディレクトリを見つけるにはどうすればよいですか?

4

3 に答える 3

2

村のアプローチを介してタンクを実行することは常にあります。単に列挙*.*してから、一致しないパターンを除外します。

于 2013-06-24T22:40:11.220 に答える
1

名前が「abc」で終わる少なくとも1つのtxtファイルを含まないすべてのディレクトリが必要な場合:

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());
于 2013-06-24T22:39:33.767 に答える
0

これが私の見解です。探しているテキストで終わるファイルを含む最初のアイテム (または null) を返し、大文字と小文字を区別しません。ラムダを削除して読みやすくすることができます。

 var directory = Directory.GetDirectories((paramStartFilePath, "*", SearchOption.AllDirectories)
                    .FirstOrDefault(x => new DirectoryInfo(x).EnumerateFiles().Any(f => !f.Name.EndsWith("abc.txt",true,CultureInfo.CurrentCulture)));           
于 2013-06-24T23:21:43.227 に答える