1

.NETコードでは、D:\ Tempとそのサブディレクトリからすべての.wavファイルを取得するループがあります:

string[] fileHolder = Directory.GetFiles("D:\\Temp","*.wav", SearchOption.AllDirectories);

フォルダ名に「blablabla」が含まれているフォルダからのすべての.wavファイルを除外したいと思います。

これはどのように行いますか?

PSこれは、サブディレクトリを含むディレクトリを除外するのと似ていますか?、しかし私はこのトピックの答えをうまく使うことができませんでした。

4

3 に答える 3

10
IEnumerable<string> files = 
   from f in Directory.GetFiles("D:\\Temp", "*.wav", SearchOption.AllDirectories)
   where !Path.GetDirectoryName(f).Contains("blablabla")
   select f;

いくつかの条件を追加します:

var files = from f in Directory.GetFiles("D:\\Temp", "*.wav", SearchOption.AllDirectories)
            let directoryName = Path.GetDirectoryName(f)
            where !directoryName.Contains("blablabla") &&
                  !direcotyName.Contains("foo")
            select f;

別の解決策:(Path.GetDirectoryNameは最速の操作ではないと思います)

public static IEnumerable<string> GetFiles(string path, string searchPattern,
                                           Func<string, bool> dirSelector)
{
    if (!dirSelector(path))
        yield break;

    foreach (var file in Directory.GetFiles(path, searchPattern))
        yield return file;

    foreach (var dir in Directory.GetDirectories(path))
        foreach (var file in GetFiles(dir, searchPattern, dirSelector))
            yield return file;
}

使用法:

Func<string, bool> dirSelector = (d) => !d.Contains("blablabla");
string[] files = GetFiles("D:\\Temp", "*.wav", dirSelector).ToArray();
于 2012-10-20T20:39:27.470 に答える
3

次のことを試してください。

string[] fileHolder = Directory.GetFiles(@"d:\temp", "*.wav",
         SearchOption.AllDirectories).Where(file => !file.Contains("blabla")).ToArray();
于 2012-10-20T20:36:26.877 に答える
1

それらを手動で整理する必要があります。

List<string> result = new List<string>();
foreach(string filename in Directory.GetFiles("D:\\Temp", "*.wav"))
{
   if (!filename.Contains("blablabla"))
      result.Add(filename);
}
于 2012-10-20T20:35:50.537 に答える