0
public static string Searcher(string path, string pattern)
    {
        var parts = new List<DirectoryInfo> { };

        DirectoryInfo dir = new DirectoryInfo(path);

        try
        {
            DirectoryInfo[] dirs = dir.GetDirectories();
            foreach (DirectoryInfo di in dirs)
            {

                parts.Add(di);
            }
        }
        catch { };

        foreach (DirectoryInfo part in parts.ToList())
        {

            if(part.ToString().Contains(pattern) == true)
            {
                return(part.ToString());
            }




            else
            {

                Searcher(part.ToString(), pattern);

            }

        }


        return null;


    }

вот так вызываю метод

Console.WriteLine(Searcher(d.Name, "___data___"));
ShaDy_AN
  • 1
  • 1

1 Answers1

0

Проблема была в том, что Вы, как и указывал @vitidev, не использовали результат рекурсивного вызова метода. Также есть несколько замечаний:

  1. Входной параметр у Вас называется path, что наталкивает на мысль, что это путь к директории, но в тоже время Вы кажется передаете в метод имя d.Name.
  2. Использование блока try...catch кажется можно избежать, достаточно проверить, что директория существует.
  3. Код испытывает серьезные проблемы с форматированием.
        public static string Searcher(string path, string pattern)
        {
            var parts = new List<DirectoryInfo>();
            var dir = new DirectoryInfo(path);
            if (!dir.Exists) 
                return null;
        parts.AddRange(dir.GetDirectories());
        foreach (var part in parts.Select(x =&gt; x.ToString()))
        {
            if (part.Contains(pattern))
                return part;
            var result = Searcher(part, pattern);
            if (result != null)
                return result;
        }
        return null;
    }