解析目录结构时出现System.StackOverflow异常

时间:2012-06-23 05:01:25

标签: c# .net file exception directory

我想要实现的是,通过解析文件,获取特定驱动器或文件夹结构中的所有文件的列表。我还试图处理在受保护文件的情况下发生的未授权异常。大多数驱动器和文件夹都很好,但在某些情况下,比如Windows Drive(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);
            }
        }            
    }
}

1 个答案:

答案 0 :(得分:3)

您是否尝试使用调试器来查看正在发生的事情?

听起来像递归,也许有一个NTFS Junction Point指向更高级别。

definition of a StackOverflowException according to MSDN

  

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

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