2013-02-28 119 views
1

嘿,即时通讯尝试创建目录中的所有文件的名称(带扩展名)列表,以及所有文件,但我需要使用递归算法。林不知道如果我在正确的轨道上!很新的C#递归算法

+1

1)为什么你需要* *递归算法?这可以非递归地实现。 2)'递归'意味着你的方法以某种方式调用自己。 – Corey 2013-02-28 06:44:10

+1

http://stackoverflow.com/questions/6061957/get-all-files-and-directories-in-specific-path-fast – 2013-02-28 06:44:48

+0

我的软件工程的朋友说使用递归算法会更容易 – user2118473 2013-02-28 06:56:06

回答

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不乱扔堆栈用无用功能不能内联的电话! – 2013-02-28 06:50:56

+0

+1这个模式。尽管我仍然更喜欢递归,因为我认为它更容易遵循(关于C#中缺少尾部的问题 - > CLR编译器)。不过,我更喜欢使用收益而不是列表。 – Aron 2013-02-28 06:59:20

+0

是的,这是基于我的实际代码是作为一个迭代块实现的 - 我使用它来遍历大约1,000,000个xml文件的目录结构... – 2013-02-28 07:04:17