使用Directory.GetFiles时出现UnauthorizedAccessException

3
在我编写的应用程序中,用户可以添加一些文件夹以递归搜索其中的某些文件。问题是他想要添加到应用程序中的文件可能存储在基础驱动器(如K:)中。因此,如果直接添加该驱动器,则会出现异常。或者如果他添加了C:\,那么我会收到UnauthorizedAccessException的错误,其中显示:“拒绝访问路径'C:\System Volume Information'”。我应该如何扫描我能够扫描的位置?并且如何使其能够完全扫描另一个非系统驱动器(所有目录)?

请查看以下链接以获取解释:http://msdn.microsoft.com/zh-cn/library/bb513869.aspx - MLJ
2个回答

5
捕获异常,忽略它,然后继续处理下一个目录。

同意,这样做很可能比在处理之前检查每个目录的访问权限要更好。 - bernhof
@Bernhof:我有同感。我考虑过检查权限的替代方法,但这样对于有效目录来说需要做两次工作(一次检查,一次解析文件夹结构),所以我决定这是一个较差的选项。 - Jeff Yates
谢谢,我也会尝试使用异常处理,当我搜索非系统基础驱动器时出现了不同的异常。 - Joan Venge

1
为什么对我不起作用? 我尝试使用try/catch UnauthorizedAccessException,但它仍然会停止程序。

因为如果您尝试使用一次调用(递归扫描子目录)来执行此操作,当引发UnauthorizedAccessException时,函数会停止。因此,您应该编写一个递归函数,循环遍历目录/子目录,并在其中调用Directory.GetFiles(将返回的结果连接到上层变量中),并包装在Try / Catch中以防止出现问题... - VSP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接