Directory.GetFiles исключает определенные имена файлов только через SearchPattern - PullRequest
0 голосов
/ 12 июля 2020

Допустим, у меня есть файлы «a.txt», «ab.txt», «c .txt» внутри C: \ temp \ someFolder.

Я хочу получить все файлы .txt и отфильтровать "ab.txt" из результатов, но делать это только через SearchPattern.

Я хотел бы иметь возможность делать что-то вроде

Directory.GetFiles("C:\\temp", "*.txt -ab", System.IO.SearchOption.AllDirectories)

, а не выполнять фильтрацию вне GetFiles функция.

Есть способ?

1 Ответ

4 голосов
/ 12 июля 2020

Синтаксис searchPattern очень ограничен :

Строка поиска для сопоставления с именами файлов в path. Этот параметр может содержать комбинацию допустимого буквального пути и символов подстановки (* и?), Но он не поддерживает регулярные выражения.

Подстановочные знаки позволяют сопоставить несколько файлов с заданным форматом, но не 'не разрешает исключение, поэтому это невозможно.

Вам придется полагаться либо на фильтрацию результата GetFiles, либо использовать EnumerateFiles с выражением фильтра, аналогично этому ответу :

Directory.EnumerateFiles("c:\\temp", "*.txt", SearchOption.AllDirectories)
         .Where(f => Path.GetFileName(f) != "ab.txt")
         .ToArray();

Обратите внимание, что этот подход вызывает ту же внутреннюю функцию InternalEnumeratePaths в классе Directory (см. здесь и здесь ), таким образом он не должен иметь никаких потерь производительности; Напротив, он должен работать еще лучше из-за вызова ToArray после того, как коллекция была отфильтрована. Это особенно актуально, если большое количество файлов соответствует начальному searchPattern.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...