15

我需要浏览计算机上的各种目录(通过 DirectoryInfo)。其中一些不可访问,并且发生 UnauthorizedAccessException。如何在不捕获异常的情况下检查目录访问?

4

3 回答 3

12

您需要使用Security命名空间。

请参阅SO 答案。

从答案:

FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
if(!SecurityManager.IsGranted(writePermission))
{
  //No permission. 
  //Either throw an exception so this can be handled by a calling function
  //or inform the user that they do not have permission to write to the folder and return.
}

更新:(以下评论)

FileIOPermission处理安全策略而不是文件系统权限,因此您需要使用DirectoryInfo.GetAccessControl.

于 2010-02-25T18:48:39.913 回答
11

简单地说,你不能。无法检查目录是否可访问,您只能确定它是否可访问。原因是一旦检查完成,权限可能会更改并使您的检查无效。您可以实施的最可靠策略是访问目录并捕获UnauthorizedAccessException.

我最近写了一篇关于这个主题的博客文章,这里有一些细节

于 2010-02-25T18:56:22.093 回答
-1

你可以只做一个简单的小布尔函数,并让一个目录信息变量尝试从给定路径获取目录。如果没有问题,则返回 true,如果异常是句柄,则返回 false,或者将您的异常子句分解为子异常并获取错误代码。

于 2010-05-18T13:52:30.827 回答