使用Directory.GetFiles(…)时,拒绝访问路径

我正在运行下面的代码,并在下面得到异常。我是否被迫将此功能放入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);那么您就可以避免堆栈溢出和内存使用问题。

例:

    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 { }

}

}

以上是 使用Directory.GetFiles(…)时,拒绝访问路径 的全部内容, 来源链接: utcz.com/qa/427329.html

回到顶部