【发布时间】:2012-06-25 09:20:57
【问题描述】:
我试图实现的是,通过解析文件获取特定驱动器或文件夹结构中所有文件的列表。我还试图处理受保护文件时发生的未经授权的异常。代码有效在大多数驱动器和文件夹中都可以,但在某些情况下,例如 Windows Drive(C:),会引发 System.StackOverflow EXception。可能是什么问题?有没有更好的方法?
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);
}
}
}
}
【问题讨论】:
-
如果您只想列出目录树中任意位置的所有文件,可以使用
root.GetFiles("*.*", SearchOption.AllDirectories)。这样你就不需要递归了。 -
@Porges 我知道这个方法,我正在做这个过程,因为我的应用程序没有管理员权限。
-
@techno,如果你的应用没有管理员权限,如何递归解决权限问题?
-
@Ray Cheng 它不会处理受保护的文件。
-
@techno,你能用递归处理受保护的文件吗?
标签: c# .net file exception directory