2016-07-09 2 views
-1

서버의 전체 폴더 목록을 작성하지만 약 65,000 개의 StackOverFlowException 공유가 있지만 예외가 있습니다. 주위 방법C# 재귀 호출시 스택 오버플로 오류

static List<string> FolderList = new List<string>(); 
static void Selection(DirectoryInfo dir) 
{ 
    FolderList.Add(dir.FullName); 
    foreach (var a_dir in dir.GetDirectories()) 
    { 
     Selection(a_dir); 
    } 
} 
+2

당신이 당신의 질문을했다 포함할지 여부를 지정하는 열거 형 값 중

하나, ** 큰 오렌지가 있었다 유용한 정보가 담긴 텍스트 영역의 오른쪽에있는 서식 방법 ** 상자. 또한 형식 지정 도구 모음 전체가있었습니다. 그리고 ** [?] ** 버튼은 포맷 도움을줍니다. * 그리고 * 텍스트 영역과 질문 게시 버튼 사이에있는 미리보기 영역 (버튼을 찾으려면 스크롤하여 게시자가 보도록 유도해야 함) 게시 할 때의 게시물 모양을 보여주는 미리보기 영역 . 게시물을 분명하게하고 시간을 할애 한 것을 보여줌으로써 좋은 답변을 얻을 수있는 가능성을 높입니다. –

+2

(이 경우에 해결해 드리겠습니다.) –

+2

디버거를 사용하여 코드를 단계별로 실행하십시오. 낯선 사람에게 코드의 문제점을 묻는 것보다 훨씬 빠르고 유익합니다. –

답변

1

알려지지 않은 깊이가있을 때 재귀를 사용하는 것은 좋지 않습니다. 다른 방법으로, (스택 데이터 구조를 사용하며, 재귀되지 않음) GetDirectories에 대한 과부하 사용할 수 있습니다 : 당신은 여전히 ​​예외가 발생하면

static List<string> FolderList = new List<string>(); 
static void Selection(DirectoryInfo dir) 
{ 
    var dirs = dir.GetDirectories("*", SearchOption.AllDirectories); 
    foreach (var a_dir in dirs) 
    { 
     FolderList.Add(dir.FullName); 
    } 
} 

을, 당신은 루프 동안 전통에 로직을 변경해야합니다. GetDirectories 아래

문서 :

의 searchPattern :

검색 문자열은 디렉토리의 이름에 일치합니다. 이 매개 변수에는 유효한 리터럴 인 경로와 와일드 카드 (* 및?) 문자 조합 (주의 참조)이 포함될 수 있지만 정규식은 지원되지 않습니다. 기본 패턴은 "*"이며 모든 파일을 반환합니다.

는 searchOption

: 검색 작업이>는 현재 디렉토리 또는 모든 하위 디렉토리

+0

재귀 적 (즉, 하위 폴더 내의 모든 하위 폴더를 반환)입니까? –

+0

@YosiDahari 구현을 확인한 결과 내부적으로 스택을 사용하지만 재귀 함수는 사용하지 않습니다. – user3185569

+0

@YosiDahari는 메서드가 폴더 내의 폴더 내의 폴더를 포함하여 * 모든 * 폴더를 반환하는지 묻는 것을 의미합니다. – EvilTak