【问题标题】:How to exclude an array from search in c#如何在c#中从搜索中排除数组
【发布时间】:2017-05-15 20:15:02
【问题描述】:

我有一个数组。比方说;

private string[] WhiteList =
     {
        "abcxyz.cs",
        "mouseapi.dll",
        "SensitivtyFix.asi",
        "drake.mp3"
     };

现在我想从目录/文件搜索中排除该数组。我该如何实现?

对于此搜索,我使用了另一个名为 BlackList 的数组,我可以从中获取所需的文件,但我无法从数组 Whitelist 中排除文件。

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);
                }
            }
        }

【问题讨论】:

  • 你的意思是,排除数组中的文件名?
  • @OldProgrammer 是的,我希望搜索返回黑名单过滤器并排除数组白名单中给出的文件。

标签: c# arrays search


【解决方案1】:

您需要的条件(用于 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);

【讨论】:

  • 我认为你的意思是 Any 不是 Exists 因为 ExistsList 的一种方法,这些实际上是数组。
  • @juharr:它也被命名为 Exists 用于数组,但它是静态的。感谢您指出问题,我可能键入了变量名并认为它们确实是列表。
【解决方案2】:

你需要

 if (BlackList.Contains(File.FullName) && !WHiteList.Contains(File.FullName)))

虽然这看起来很奇怪,因为您不能将白名单名称放入黑名单。也许你需要||不是&&

【讨论】:

  • 没那么奇怪,也许黑名单包含rake,而白名单包含(如问题)drake.mp3
  • 这表明您的建议有什么问题 - 根据文件名中包含(部分匹配)列表中的一项的问题。整个文件名不会在列表中。
  • Blacklist 包含具有不同扩展名的文件列表,例如 .cs,因此它返回一个带有 .cs 扩展名的文件的大列表。我需要将白名单中具有 .cs 扩展名的文件从结果中排除。我希望它很清楚。
猜你喜欢
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 2014-07-13
  • 1970-01-01
相关资源
最近更新 更多