我是一个阵列。让我们说吧;
private string[] WhiteList =
{
"abcxyz.cs",
"mouseapi.dll",
"SensitivtyFix.asi",
"drake.mp3"
};
现在我想从目录/文件搜索中排除该数组。我如何实现这一目标?
对于此搜索,我使用另一个名为BlackList的数组,我可以从中获取所需的文件,但我无法从阵列白名单中排除文件。
for (int i = 0; i < GetSize; ++i)
{
foreach (var File in DirInf.GetFiles("*", SearchOption.AllDirectories))
{
if (File.FullName.Contains(Blacklist[i]) && !File.FullName.Contains(WhiteList[i]))
{
listBox1.Items.Add("File: " + File.FullName);
}
}
}
答案 0 :(得分:0)
您需要的条件(与LINQ Where
函数一起使用)是
Predicate<FileInfo> filter =
f => Array.Exists(blackList, f.FullName.Contains) &&
!Array.Exists(whiteList, f.FullName.Contains);
原始代码的问题在于它查看blackList[i]
和whiteList
相同i
,但匹配的列表索引可能不同。
现在您可以填写列表框:
foreach (var file in DirectoryInfo.GetFiles("*", SearchOption.AllDirectories).Where(filter))
listBox1.Items.Add(file);
答案 1 :(得分:-1)
你需要
if (BlackList.Contains(File.FullName) && !WHiteList.Contains(File.FullName)))
虽然这看起来很奇怪,因为你不能把白名单名称放在黑名单中。也许你需要||不是&amp;&amp;