0

Список папок которые нужно обойти при поиске (не показывать их)

public static readonly string[] BypassDir = new string[]
{
   "Microsoft", "History", "Temp", 
};

Метод которым ищу файлы с "обходом"

public static List<string> GetAllFiles(string path, string pattern, SearchOption so = SearchOption.AllDirectories)
{
   var files = new List<string>();

try { foreach (string file in Directory.EnumerateFiles(path, pattern, so)) { var fileInfo = new FileInfo(file); files.Add(file);
} foreach (string fl in Directory.EnumerateDirectories(path, "*", so)) { if (!BypassDir.Contains(fl, StringComparer.OrdinalIgnoreCase)) //if (!BypassDir.Any(ext => ext != Path.GetExtension(fl))) { files.AddRange(GetAllFiles(fl, pattern, so)); } } } catch { } return files; }

Но при сканирование всё ровно проходит папки, как исключить их правильно?

GooliveR
  • 1,979
  • 2
    У вас в массиве простые слова, допустим, Microsoft, а fl небось целый путь (c:\SomeDir\Microsoft). Задайте теперь себе вопрос, есть ли в BypassDir значение c:\SomeDir\Microsoft? В строке, что вы закомментировали, там вы пошли в верном направление, только что такое GetExtension()? Что вообще такое Extension? Верно, это все, что идет после точки (.exeнапример), ну так почему сверяете название директории и расширение? – EvgeniyZ Nov 18 '21 at 23:30
  • В тему https://ru.stackoverflow.com/a/1235165/373567 – aepot Nov 18 '21 at 23:49

1 Answers1

1
if (!BypassDir.Contains(fl, StringComparer.OrdinalIgnoreCase))
if (!BypassDir.Contains(Path.GetFileName(fl), StringComparer.OrdinalIgnoreCase))

А вообще, лучше сделать BypassDir не массивом, а Setом.

Qwertiy
  • 123,725
  • HashSet ? Если да, то почему именно им? И как тогда его использовать? Так же как со string[] ? – GooliveR Nov 19 '21 at 00:57
  • @GooliveR, потому что при большом количестве элементов поиск в нём эффективнее, чем в массиве. – Qwertiy Nov 19 '21 at 01:52