有在.NET 4.0中一个不错的新方法,通过列举的方式流获取目录中的文件。Directory.EnumerateFiles => UnauthorizedAccessException
这里的问题是,如果一个人希望枚举所有文件中的一个可能不会提前知道哪些文件或文件夹的访问保护,可以抛出UnauthorizedAccessException。
要重现,一个可以运行这个片段:
foreach (var file in Directory.EnumerateFiles(@"c:\", "*", SearchOption.AllDirectories))
{
// whatever
}
在此之前,.NET方法存在,有可能大致实现通过实现字符串数组返回方法上的递归迭代器相同的效果。但它不像新的.NET方法那么懒。
所以,我们要做什么呢?在使用这种方法时,UnauthorizedAccessException可以被抑制还是生活中的事实?
在我看来,该方法应该有一个接受过载的作用,以应付任何异常。
是的,你的dump()方法应该是弹性与它正试图在文件中的问题转储。给它一个超负荷。 – 2011-02-23 22:33:03
这不是我的问题汉斯。问题在于对文件迭代器(EnumerateFiles)的foreach引发了一个UnauthorizedAccessException异常,并停止了进一步的枚举,当需要详尽的结果集时这是不可取的。 – 2011-02-23 22:36:51
@Hans - 'Dump()'方法在这里不是问题,它只是遍历字符串枚举。问题是'Directory.EnumerateFiles'方法本身。我不认为有办法解决这个问题。我相信你必须求助于'SearchOption.TopDirectoryOnly'并且自己处理递归。 – Mormegil 2011-02-23 22:37:11