c#查找目录中包含列表/数组/数据表等中指定的值的所有文件名

时间:2018-11-25 04:07:08

标签: c# search getfiles

使用c#.NET 4.6.1,我要使用一组字符串来从给定目录中选择“有效”文件。这就是我的意思:

这是我要用于从存储在数组中的目录中获取预期文件名的字符串的示例。我不在乎值是否存储在数组或列表或其他某种类型的集合中。我可以将它们放在最适合搜索我想要的文件名的任何类型的集合中。

//"ValidValues" doesn't have to be an array, 
//it can be a list/array/datatable or some other kind of collection
string[] ValidValues = new string[2] {"ab","cd"};

目录中的文件:

  

file_1_.txt

     

file_ab_.blah

     

file_2_.something

     

file_cd_.blo

我想使用ValidValues集合在目录中搜索文件名,该集合包含要用作搜索条件的字符串。过去我使用以下方法从目录中删除文件名:

string[] ValidFiles = Directory.GetFiles(@"C:\Drop");

但是我不知道如何指定一个过滤器,该过滤器使用要在目录的文件名中搜索的集合中包含的值。我知道有些lambda表达式可能可以做到这一点,但我不太确定如何使用它们。在我要查找的代码运行之后,我期望拥有

  

file_ab_.blah

  

file_cd_.blo

ValidFiles中。

我看过一些帖子,其中搜索条件是硬编码的,并用“ ||”分隔或其他循环搜索字符串的集合,但我想通过使用ValidValues在目录中查找包含ValidValues中任何值的文件名来使其动态化。我正在从数据库中获取ValidValues中包含的字符串。

希望这是有道理的,我有一种强烈的感觉,可以做到这一点,我只是不知道实现此目的的确切语法。我不在乎它是如何完成的,无论是使用LINQ还是其他方法,我都只想找到最优雅,最有效的方法。如果可能的话,我想避免遍历从数据库中取出的字符串集合,而是在单个语句中将我从数据库中取出的字符串集合用作搜索条件,可能使用诸如lambda表达式之类的东西之类的。预先感谢。

1 个答案:

答案 0 :(得分:1)

考虑到您已经在集合中使用了过滤器关键字,则可以执行以下操作。

var filteredFileList = ValidStrings.SelectMany(filter => Directory.EnumerateFiles(filePath, $"*{filter}*"))
    .ToList();

其中ValidStrings是您的过滤器关键字的集合,filePath是您要搜索的位置