2013-02-28 5 views
1

안녕하세요, 나는 디렉토리에있는 모든 파일과 모든 파일의 이름 목록을 만들려고 노력하고 있지만 모두 재귀 알고리즘을 사용해야합니다. 임 오른쪽 트랙에 메신저 확실하지 않은! 아주 새로운 C#재귀 알고리즘

+1

1) 왜 * 필요 * 재귀 알고리즘을합니까? 이것은 비 재귀 적으로 성취 될 수있다. 2)'Recursive '는 당신의 메소드가 어떤 식 으로든 자신을 호출한다는 것을 의미합니다. – Corey

+1

http://stackoverflow.com/questions/6061957/get-all-files-and-directories-in-specific-path-fast –

+0

내 소프트웨어 엔지니어링 친구가 재귀 알고리즘을 사용하는 것이 더 쉬울 것이라고 말했습니다. – user2118473

답변

4

에를 나는 보통 큐와 함께 이런 종류의 작업을 수행합니다

// Make sure rootDir exists first... 

var files = new List<string>(); 
var dirs = new Queue<string>(); 
dirs.Enqueue(rootDir); 

while(dirs.Count > 0) { 

    var dir = dirs.Dequeue(); 

    foreach(var fileName in Directory.GetFiles(dir)) { 
    files.Add(fileName); 
    } 

    foreach(var subDir in Directory.GetDirectories(dir)) { 
    dirs.Enqueue(subDir); 
    } 
} 

// Now populate your list with the files collection. 
+0

+1 쓸데없는 기능을 가진 스택을 버리지 않기 위해 +1 인라인 될 수없는 전화! –

+0

+1이 패턴입니다. 비록 내가 C#에서 CLR 컴파일러에서 Tail이 부족하다는 사실을 부끄러워 할 것 같아서 재귀가 더 좋아 지긴하지만. 그러나 나는 List보다는 yield를 선호한다. – Aron

+0

예, 이것에 기반한 실제 코드는 반복기 블록으로 구현됩니다. 약 1,000,000 xml 파일의 디렉토리 구조를 처리하는 데 사용하고 있습니다 ... –