c # найти все имена файлов в каталоге, которые содержат значение, указанное в list / array / datatable и т. д. - PullRequest
0 голосов
/ 25 ноября 2018

Использование 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");

Но я не знаю, как указать фильтр, который использует значения, содержащиеся в коллекции, для поиска в именах файлов вкаталог.Я знаю, что есть лямбда-выражения, которые могут это сделать, но я не совсем уверен, как их использовать.После запуска кода, который я ищу, я ожидаю получить

file_ab_.blah

и

file_cd_.blo

в ValidFiles.

Я видел несколько постов, в которых критерии поиска жестко закодированы и разделены знаком "||"или другие, где коллекция строк поиска проходит циклически, но я хочу сделать это динамическим, используя ValidValues, чтобы найти в моем каталоге имена файлов, которые содержат любое из значений в ValidValues.Я получаю строки, содержащиеся в ValidValues, из базы данных.

Надеюсь, это имеет смысл, у меня есть сильное чувство, что это можно сделать, я просто не знаю точный синтаксис для достижения этой цели.Мне все равно, как это сделать, используя LINQ или что-то еще, я просто хочу самый элегантный и эффективный метод.Если возможно, я бы хотел избежать зацикливания набора строк, которые я получаю из базы данных, и вместо этого использовать набор строк, которые я выбираю из базы данных, в качестве критерия поиска в одном выражении, возможно, используя что-то вроде лямбда-выражения или чего-то подобногои тому подобное.Заранее спасибо.

1 Ответ

0 голосов
/ 25 ноября 2018

Учитывая, что у вас уже есть ключевые слова фильтра в коллекции, вы можете сделать следующее:

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

Где ValidStrings - это коллекция ключевых слов фильтра, filePath - ваше местоположение для поиска

...