我正在运行下面的代码,并在下面得到异常。我是否被迫将此功能放入try catch或是否有其他方法来递归获取所有目录?我可以编写自己的递归函数来获取文件和目录。但我想知道是否有更好的方法。
// get all files in folder and sub-folders var d = Directory.GetFiles(@"C:\", "*", SearchOption.AllDirectories); // get all sub-directories var dirs = Directory.GetDirectories(@"C:\", "*", SearchOption.AllDirectories);
“拒绝访问路径’C:\ Documents and Settings '。
如果您想在失败后继续下一个文件夹,那么可以。您必须自己做。我建议使用Stack<T>(深度优先)或(深度优先)Queue<T>而不是递归,并建议使用迭代器块(yield return);那么您就可以避免堆栈溢出和内存使用问题。
Stack<T>
Queue<T>
yield return
例:
public static IEnumerable<string> GetFiles(string root, string searchPattern) { Stack<string> pending = new Stack<string>(); pending.Push(root); while (pending.Count != 0) { var path = pending.Pop(); string[] next = null; try { next = Directory.GetFiles(path, searchPattern); } catch { } if(next != null && next.Length != 0) foreach (var file in next) yield return file; try { next = Directory.GetDirectories(path); foreach (var subdir in next) pending.Push(subdir); } catch { } } }