Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c查找目录中包含列表/数组/数据表等中指定值的所有文件名_C#_Search_Getfiles - Fatal编程技术网

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

C# c查找目录中包含列表/数组/数据表等中指定值的所有文件名,c#,search,getfiles,C#,Search,Getfiles,使用c.NET4.6.1,我有一组字符串,用于从给定目录中选择有效文件。我的意思是: 下面是一个字符串示例,我想使用它从存储在数组中的目录中获取预期的文件名。我不在乎这些值是否存储在数组、列表或其他类型的集合中。我可以将它们放在任何类型的集合中,以最适合搜索我想要的文件名 //"ValidValues" doesn't have to be an array, //it can be a list/array/datatable or some other kind of

使用c.NET4.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"};
目录中的文件:

文件_1_.txt

文件,等等

文件2什么的

文件\u cd\uu.blo

等等

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

string[] ValidFiles = Directory.GetFiles(@"C:\Drop");
但我不知道如何指定一个过滤器,该过滤器使用要在目录中的文件名中搜索的集合中包含的值。我知道可能有lambda表达式可以做到这一点,但我不太确定如何使用它们。在我寻找的代码运行之后,我希望

文件,等等

文件\u cd\uu.blo

在有效文件中

我见过一些帖子,其中搜索条件是硬编码的,并用| |分隔,或者其他帖子中搜索字符串的集合是循环的,但我想通过使用validValue在我的目录中查找包含validValue中的任何值的文件名来实现这一点。我正在从数据库中获取ValidValue中包含的字符串


希望这是有意义的,我有一个强烈的感觉,它可以做到我只是不知道确切的语法来完成这一点。我不在乎它是如何完成的,使用LINQ或其他什么,我只想要最优雅、最有效的方法。如果可能的话,我希望避免循环通过从数据库中获取的字符串集合,而是在单个语句中使用从数据库中获取的字符串集合作为搜索条件,可能使用lambda表达式之类的东西。提前感谢。

考虑到您已经在一个集合中拥有了筛选关键字,您可以执行以下操作

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

ValidStrings是筛选关键字的集合,filePath是搜索的位置

这个问题的问题是你没有真正做足够的研究,我的意思是有很多解决方案,而且所有的信息都有点不清楚你到底想要什么。我建议你把你的问题分解成小部分。1从数据库获取数据,2枚举文件。3个过滤器文件,4个。。。然后,当你在这方面有问题时,用你的代码提问,详细的调试描述什么不起作用,你期望什么,为什么,我会尽量说得更具体一些。1.我有一个集合,一个列表或数组,或者任何称为ValidValues的集合,其中包含字符串ab和cd。2.我有一个目录,里面有文件。3.我想查找目录中包含ValidValue中任何字符串的所有文件名,在本例中为ab或cd。4.如果可能的话,我想用一条语句来实现这一点,而不必遍历validValue中的元素。我还没有任何代码来做这件事,这就是为什么我要问这个问题。希望这能澄清一点。搜索和研究并不是为了找到一段完全符合你需要的代码。相反,为了了解制定自己的解决方案所需的概念,我很抱歉,我没有更清楚地传达到目前为止我所做的事情。我已经修改了我的OP,以显示我所经历的步骤,这些步骤引导我提出了这个问题。如果我的OP可以被审查,这样我将来就不会因为这个问题而被限制提问,我将不胜感激。谢谢。这正是我想要的。那么,假设我的数据库值存储在一个名为ValidStrings的集合中,您的建议看起来如何?我已经用指定的集合名称“ValidStrings”更新了代码,所以$*{filter}*应该保持语句中的状态?是的,在这个上下文中,filter是Lambda表达式中的参数名称。您可以根据您的命名约定将其重命名为任何名称,只要它与LHS匹配必须按照您在回答中概述的方式进行设置,并且它可以像一个符咒一样工作。被接受为答案,并试图提高投票率,但我的声誉太低,无法表现出来。我不明白为什么我对这个问题投了反对票,似乎我因为没有任何代码而受到批评,但我没有任何代码可以显示,因此我提出这个问题的原因。也许有人能给我一个坚定的、向上的一票,让我用这个问题来对抗向下的一票;谢谢@Anu Viswan