在 .NET 代码中,我有一个循环,它从 D:\Temp 及其子目录中获取所有 .wav 文件:
string[] fileHolder = Directory.GetFiles("D:\\Temp","*.wav", SearchOption.AllDirectories);
我想排除来自文件夹名称中包含“blablabla”的文件夹的所有 .wav 文件。
如何做到这一点?
PS这类似于排除包含子目录的目录?,但我无法成功使用该主题的答案。
在 .NET 代码中,我有一个循环,它从 D:\Temp 及其子目录中获取所有 .wav 文件:
string[] fileHolder = Directory.GetFiles("D:\\Temp","*.wav", SearchOption.AllDirectories);
我想排除来自文件夹名称中包含“blablabla”的文件夹的所有 .wav 文件。
如何做到这一点?
PS这类似于排除包含子目录的目录?,但我无法成功使用该主题的答案。
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();
尝试以下操作:
string[] fileHolder = Directory.GetFiles(@"d:\temp", "*.wav",
SearchOption.AllDirectories).Where(file => !file.Contains("blabla")).ToArray();
您将不得不手动对它们进行分类:
List<string> result = new List<string>();
foreach(string filename in Directory.GetFiles("D:\\Temp", "*.wav"))
{
if (!filename.Contains("blablabla"))
result.Add(filename);
}