C# 比较两个文件夹-模板与实际文件夹
我试图将模板文件夹与现有目录结构的子文件夹进行比较。我试图递归地遍历每个目录中的所有子文件夹。我的代码如下C# 比较两个文件夹-模板与实际文件夹,c#,directoryinfo,C#,Directoryinfo,我试图将模板文件夹与现有目录结构的子文件夹进行比较。我试图递归地遍历每个目录中的所有子文件夹。我的代码如下 public void compareDirectories(DirectoryInfo Templatedir, DirectoryInfo Projectdir) { DirectoryInfo[] recursiveTemplatedirs = Templatedir.GetDirectories("*.*"); DirectoryInfo[] recursivePr
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
的作用域仅在foreach循环中
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);
}
将最后一个CompareDirectory移动到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);
}
}
}
逐步检查代码。这两个参数是否都被传递到compasreDirectories
不为null?recursiveProjectdir仅在第二个foreach作用域中有效。无法运行此操作,您将无法编译此操作。如果您只关心目录,则可以使用。注意:仅在.NET4中可用。是否有一种方法可以将recursiveProjectdir传递出foreach循环。最后,我尝试比较两个位置的目录,然后使用模板目录上设置的ACL权限更改现有目录上的ACL权限。recursiveProjectdir
位于foreach循环内。您希望在foreach外部使用哪个递归ProjectDir实例?您只需在foreach外部声明一个变量,并在foreach内部为其赋值。通过这种方式,您可以在foreach外部使用recursiveProjectdir