小编典典

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

c#

我正在运行下面的代码,并在下面得到异常。我是否被迫将此功能放入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 '。


阅读 835

收藏
2020-05-19

共1个答案

小编典典

如果您想在失败后继续下一个文件夹,那么可以。您必须自己做。我建议使用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 { }
        }
    }
2020-05-19