Сравнение двух папок - Шаблон против фактического - PullRequest
2 голосов
/ 09 января 2012

Я пытаюсь сравнить папку шаблонов с подпапками с существующей структурой каталогов.Я пытаюсь рекурсивно перебрать все подпапки в каждом каталоге.Мой код выглядит следующим образом.

public void compareDirectories(DirectoryInfo Templatedir, DirectoryInfo Projectdir)
{
    DirectoryInfo[] recursiveTemplatedirs = Templatedir.GetDirectories("*.*");
    DirectoryInfo[] recursiveProjectdirs = Projectdir.GetDirectories("*.*");

    string recursiveName;
    string projectName;

    foreach (DirectoryInfo recursiveTemplatedir in recursiveTemplatedirs) 
    {
        recursiveName = recursiveTemplatedir.Name.ToString();
        foreach (DirectoryInfo recursiveProjectdir in recursiveProjectdirs)
        {
            projectName = recursiveProjectdir.Name.ToString();
            if (recursiveName == projectName)
            {
                lstTest.Items.Add("Match " + recursiveName);
            }
            else lstTest.Items.Add("No Match " + recursiveName);
        }

        compareDirectories(recursiveTemplatedir, recursiveProjectdir);
    }
}

Когда я пытаюсь запустить это, я получаю ошибку, что recursiveProjectdir не существует в этом контексте.Любые мысли о том, как заставить это работать?

Ответы [ 2 ]

3 голосов
/ 09 января 2012

Вы получаете ошибку, поскольку область действия recursiveProjectdir находится только внутри foreach loop

foreach (DirectoryInfo recursiveTemplatedir in recursiveTemplatedirs) 
    {
        recursiveName = recursiveTemplatedir.Name.ToString();
        foreach (DirectoryInfo recursiveProjectdir in recursiveProjectdirs)
        {
        }
        //recursiveProjectdir doesn't exists outside the foreach loop
        compareDirectories(recursiveTemplatedir, recursiveProjectdir);
    }
0 голосов
/ 24 февраля 2016

Переместить последние каталоги сравнения внутри цикла foreach.Только что изменил ваш метод тестирования.

public static void compareDirectories(DirectoryInfo Templatedir, DirectoryInfo Projectdir)
{
    DirectoryInfo[] recursiveTemplatedirs = Templatedir.GetDirectories("*.*");
    DirectoryInfo[] recursiveProjectdirs = Projectdir.GetDirectories("*.*");

    string recursiveName;
    string projectName;

    foreach (DirectoryInfo recursiveTemplatedir in recursiveTemplatedirs) 
    {
        recursiveName = recursiveTemplatedir.Name.ToString();
        foreach (DirectoryInfo recursiveProjectdir in recursiveProjectdirs)
        {
            projectName = recursiveProjectdir.Name.ToString();
            if (recursiveName == projectName) {
              Console.WriteLine("Match " + recursiveName);
            } else 
              Console.WriteLine("No Match " + recursiveName);

        compareDirectories(recursiveTemplatedir, recursiveProjectdir);
        }

    }
}
...