C# 通过目录结构进行分析时System.StackOverflow异常

C# 通过目录结构进行分析时System.StackOverflow异常,c#,.net,file,exception,directory,C#,.net,File,Exception,Directory,我试图实现的是,通过解析文件来获取特定驱动器或文件夹结构中所有文件的列表。我还试图处理受保护文件发生的未经授权的异常。该代码在大多数驱动器和文件夹中运行良好,但在某些情况下,如Windows驱动器(C:),引发System.StackOverflow异常。可能是什么问题?有更好的方法吗 static void WalkDirectoryTree(System.IO.DirectoryInfo root) { System.IO.FileInfo[] files = nul

我试图实现的是,通过解析文件来获取特定驱动器或文件夹结构中所有文件的列表。我还试图处理受保护文件发生的未经授权的异常。该代码在大多数驱动器和文件夹中运行良好,但在某些情况下,如Windows驱动器(C:),引发System.StackOverflow异常。可能是什么问题?有更好的方法吗

static void WalkDirectoryTree(System.IO.DirectoryInfo root)
    {
        System.IO.FileInfo[] files = null;
        System.IO.DirectoryInfo[] subDirs = null;

        // First, process all the files directly under this folder
        try
        {
            files = root.GetFiles("*.*");
        }
        // This is thrown if even one of the files requires permissions greater
        // than the application provides.
        catch (UnauthorizedAccessException e)
        {
           //eat
        }

        catch (System.IO.DirectoryNotFoundException e)
        {
           //eat
        }

        if (files != null)
        {
            foreach (System.IO.FileInfo fi in files)
            {

                Console.WriteLine(fi.FullName);
            }

            // Now find all the subdirectories under this directory.
            subDirs = root.GetDirectories();

            foreach (System.IO.DirectoryInfo dirInfo in subDirs)
            {
                // Resursive call for each subdirectory.
                WalkDirectoryTree(dirInfo);
            }
        }            
    }
}

您是否尝试过使用调试器查看发生了什么

听起来像是递归,也许有一个指向更高层次的地方

问题是

执行堆栈溢出时引发的异常 因为它包含太多嵌套方法调用。该类不能为空 继承的


所以这就是为什么我猜。系统上的目录结构不太可能比执行堆栈允许的调用数更深。

您是否尝试过使用调试器查看发生了什么

听起来像是递归,也许有一个指向更高层次的地方

问题是

执行堆栈溢出时引发的异常 因为它包含太多嵌套方法调用。该类不能为空 继承的



所以这就是为什么我猜。系统上的目录结构不太可能比执行堆栈允许的调用数更深。

递归中的递归:)我能做些什么来解决这个问题?或者有其他方法吗?首先,验证确实如此。然后转到google。也许先读这篇文章:)递归中的递归:)我能做些什么来解决这个问题?或者有其他的方法吗?首先,验证它确实是这样。然后去谷歌你去。不过,可能先阅读本文:)如果您只想列出目录树中任何位置的所有文件,可以使用
root.GetFiles(“**”,SearchOption.AllDirectories)
。这样你就不需要递归了。@Porges我知道这个方法,我这样做是因为我的应用程序没有管理员权限。@techno,如果你的应用程序没有管理员权限,递归怎么解决权限问题?@Ray Cheng它不会处理受保护的文件。@techno,你能用递归处理受保护的文件吗?如果你只想列出目录树中任何地方的所有文件,你可以使用
root.GetFiles(“**”),SearchOption.AllDirectories)
。这样你就不需要递归了。@Porges我知道这个方法,我这样做是因为我的应用程序没有管理员权限。@techno,如果你的应用程序没有管理员权限,递归怎么解决权限问题?@Ray Cheng它不会处理受保护的文件。@techno,你能用递归处理受保护的文件吗?