System.IO - используйте Directory / LINQ для замены некоторых файлов в списке другими - PullRequest
0 голосов
/ 06 мая 2019

Я получаю список файлов, используя каталог System.IO, таким образом:

var srcFiles = Directory.GetFiles(remotePath);

У меня также есть список строк, разделенных запятыми, каждую из которых я хочу проверить на отсутствие в именах.из вышеуказанных файлов.Например:

string[] filterOn = EndPoint.FileNameDoesNotContainFilter.Split(',').ToArray();

дает мне следующий массив:

filterOn contains ["GoodFile", "EvenBetterFile"]

Теперь файлы без любой из двух строк заменят все файлы, которые в настоящее время находятся вприведенный выше список srcFiles (или новый список, если это имеет больше смысла).Я пытаюсь сделать это с помощью LINQ, но не могу туда добраться.Как это сделать?

РЕДАКТИРОВАТЬ: Ответ от @dvo дает мне правильные файлы, однако иногда строки фильтра содержатся в переданном в remotePath.

Типичный путь / файл: C: \ TEMP \APPS \ AMS \ Services \ sc0189v \ APPS \ GoodFile \ test.txt.

Как видите, «GoodFile» находится в пути, но не в имени файла.И все же этот файл должен быть отклонен.Я предполагаю, что ищу что-то в System.IO.Directory, которое могло бы помочь.Не уверен, правда.

1 Ответ

0 голосов
/ 06 мая 2019

Попробуйте это:

var noMatch = srcFiles.Where(file => !filterOn.Any(filter => file.ToUpperInvariant().Contains(filter.ToUpperInvariant()))).ToList();

Это создаст новый список, в котором имя файла не содержит фильтра.Это игнорирует регистр путем преобразования как имени файла, так и фильтра в верхний регистр.Вы можете сохранить результаты в том же списке, если вы замените noMatch на srcFiles.Вы можете сделать это с учетом регистра, если вы удалите .ToUpperInvariant() из обеих частей предложения Any.Вы можете захватить совпадения фильтра, удалив ! из предложения Where.

Надеюсь, это поможет!

...