2012-01-09 4 views
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이이 컨텍스트에 존재하지 않는다는 오류가 발생합니다. 이 방법을 실행하는 방법에 대한 의견이 있으십니까?

+0

코드를 단계별로 실행하십시오. 두 매개 변수가'compasreDirectories'가 아닌 null로 전달되고 있습니까? –

+1

recursiveProjectdir은 두 번째 foreach 범위에서만 유효합니다. – ken2k

+0

당신은 이것을 실행할 수 없습니다, 당신은 이것을 컴파일하는 것을 계속합니다. – thekip

답변

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

foreach 루프에서 recursiveProjectdir을 전달할 수있는 방법이 있습니까? 궁극적으로 두 위치의 디렉터리를 비교하려고 시도하고 템플릿 디렉터리에 ACL 권한이 설정된 기존 디렉터리에 대한 ACL 사용 권한을 변경하려고합니다. –

+0

'recursiveProjectdir'는 foreach 루프 내에 있습니다. 'recursiveProjectdir'의 어떤 인스턴스를 foreach 밖에서 사용 하시겠습니까? foreach 외부에서 변수를 선언하고 foreach 내에 값을 할당 할 수 있습니다. 이런 식으로 foreach 밖에서'recursiveProjectdir'을 사용할 수 있습니다. –

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

    } 
}