Поиск во всех папках подпапки на наличие указанного файла - PullRequest
0 голосов
/ 03 марта 2020

У меня есть главный каталог, в котором есть несколько подкаталогов. Предполагается, что в каждом из этих подкаталогов будет файл app.config, и я хочу его проверить. Этот файл app.config может находиться в любом месте данного подкаталога. Что касается моей реализации ниже, я могу проверить, находится ли этот конфигурационный файл непосредственно внутри данного подкаталога (например, если подкаталог «папка», я проверю, доступен ли app.confg в папке path \ app.config), но он не в состоянии проверить, находится ли app.config в любом месте данного подкаталога.

В том смысле, что файл app.config может быть внутри подкаталога данного исходного подкаталога. в основном где-нибудь внутри данного подкаталога

Можно ли как-нибудь реализовать это поведение?

private void ValidateFiles(string path)
        {



            string[] filesindirectory = Directory.GetDirectories(path);
            foreach (var subDir in filesindirectory)
            {
                string pathToConfigFile = Path.Combine(subDir, "app.config");
                if (File.Exists(pathToConfigFile))
                {

                }

                else
                {

                }
            }
        } 

Ответы [ 3 ]

2 голосов
/ 03 марта 2020

Вы можете использовать метод Directory.GetFiles, чтобы найти файл в папке, а в параметре SearchOption передать SearchOption.AllDirectories для поиска во всех подкаталогах.

Вот пример кода для справки:

    private void ValidateFiles(string path)
    {
        var filesindirectory = Directory.GetFiles(path, "app.config", SearchOption.AllDirectories);
        foreach (var file in filesindirectory)
        {
            Console.WriteLine(file);
        }
    }

В переменной filesindirectory у вас теперь будут все имена файлов (в нашем случае это app.config) вместе с путем.
Для получения дополнительной информации: Microsoft Do c

0 голосов
/ 03 марта 2020
var LstfileDirectory = Directory.GetFiles(path, "app.config",
    SearchOption.AllDirectories)
    .ToList();

LstfileDirectory.ForEach(Item => Console.WriteLine(Item)); 
0 голосов
/ 03 марта 2020
  1. Использование рекурсии, если ваш путь содержит подкаталоги внутри подкаталогов.
private void ValidateFiles(string path)
        {
            DirSearch(path);
        } 


private void DirSearch(string sDir)
        {
            List<String> files = new List<String>();
            try
            {
                foreach (string f in Directory.GetFiles(sDir))
                {
                string pathToConfigFile = Path.Combine(sDir, "app.config");
                if (File.Exists(pathToConfigFile))
                {

                }
                else
                {

                }

                }
                foreach (string d in Directory.GetDirectories(sDir))
                {
                    files.AddRange(DirSearch(d));
                }
            }
            catch (System.Exception excpt)
            {
                MessageBox.Show(excpt.Message);
            }

        }
...