2

我正在尝试将模板文件夹与具有现有目录结构的子文件夹进行比较。我正在尝试递归遍历每个目录中的所有子文件夹。我的代码如下。

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 在此上下文中不存在的错误。关于如何让它运行的任何想法?

4

2 回答 2

3

您收到错误,因为范围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);
    }
于 2012-01-09T13:38:39.360 回答
0

在 foreach 循环中移动最后一个 compareDirectories。刚刚修改了您的测试方法。

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);
        }

    }
}
于 2016-02-23T23:09:54.090 回答