2012-06-23 3 views
0

달성하려는 것은 특정 드라이브 또는 폴더 구조의 모든 파일 목록을 파일을 통해 파싱하여 얻습니다. 또한 권한이 부여되지 않은 예외를 처리하려고합니다. 대부분의 드라이브 및 폴더에서는 코드가 제대로 작동하지만 Windows Drive (C :)와 같은 경우에는 System.StackOverflow 예외가 발생합니다. 문제가 될 수있는 것은 무엇입니까? 더 좋은 방법은 있습니까? ?System.StackOverflow 예외 구조를 통해 구문 분석하는 동안

static void WalkDirectoryTree(System.IO.DirectoryInfo root) 
    { 
     System.IO.FileInfo[] files = null; 
     System.IO.DirectoryInfo[] subDirs = null; 

     // First, process all the files directly under this folder 
     try 
     { 
      files = root.GetFiles("*.*"); 
     } 
     // This is thrown if even one of the files requires permissions greater 
     // than the application provides. 
     catch (UnauthorizedAccessException e) 
     { 
      //eat 
     } 

     catch (System.IO.DirectoryNotFoundException e) 
     { 
      //eat 
     } 

     if (files != null) 
     { 
      foreach (System.IO.FileInfo fi in files) 
      { 

       Console.WriteLine(fi.FullName); 
      } 

      // Now find all the subdirectories under this directory. 
      subDirs = root.GetDirectories(); 

      foreach (System.IO.DirectoryInfo dirInfo in subDirs) 
      { 
       // Resursive call for each subdirectory. 
       WalkDirectoryTree(dirInfo); 
      } 
     }    
    } 
} 
+2

디렉토리 트리의 모든 위치에 모든 파일을 나열하려는 경우'root.GetFiles ("*. *", SearchOption.AllDirectories)'를 사용할 수 있습니다. 이렇게하면 재발 할 필요가 없습니다. – porges

+0

@Porges이 방법을 알고 있습니다. 내 애플리케이션에 관리자 권한이 없기 때문에이 프로세스를 수행하고 있습니다. – techno

+0

@techno, 앱에 관리자 권한이없는 경우 재귀 적으로 권한 문제를 해결하려면 어떻게해야합니까? –

답변

3

무슨 일이 일어나고 있는지 디버거로 확인해 보셨습니까?

재귀와 비슷하게 어딘가 높은 레벨을 가리키는 곳이 NTFS Junction Point 일 수도 있습니다.

definition of a StackOverflowException according to MSDN

너무 많은 중첩 된 메소드 호출이 포함되어 있기 때문에 실행 스택이 를 오버 플로우 할 때 throw되는 예외입니다. 이 클래스는 상속받을 수 없습니다.

그래서 제가 추측하고 있습니다. 시스템의 디렉토리 구조가 실행 스택이 허용하는 호출 수보다 더 심한 경우는 거의 없습니다.

+0

재귀 내부 재귀 :) – JeremyWeir

+0

이 문제를 해결하려면 어떻게해야합니까? 아니면 대체 방법이 있습니까? – techno

+3

먼저, 이것이 사실 인 지 확인하십시오. – JeremyWeir

관련 문제