0

我试图实现的是,通过解析文件来获取特定驱动器或文件夹结构中所有文件的列表。我还试图处理在受保护文件的情况下发生的未经授权的异常。代码在大多数情况下都可以正常工作驱动器和文件夹,但在某些情况下,如 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);
            }
        }            
    }
}
4

1 回答 1

3

您是否尝试过使用调试器单步执行以查看发生了什么?

听起来像递归,也许某处有一个NTFS 连接点指向更高的级别。

根据 MSDN,StackOverflowException的定义是

执行堆栈溢出时抛出的异常,因为它包含太多的嵌套方法调用。这个类不能被继承。

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

于 2012-06-23T05:06:05.843 回答