使用Directory.GetFiles(…)时,拒绝访问路径
我正在运行下面的代码,并在下面得到异常。我是否被迫将此功能放入try
catch或是否有其他方法来递归获取所有目录?我可以编写自己的递归函数来获取文件和目录。但我想知道是否有更好的方法。
// get all files in folder and sub-foldersvar 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