.NET-检查目录是否可以在没有异常处理的情况下访问

.NET-检查目录是否可以在没有异常处理的情况下访问,.net,directoryinfo,.net,Directoryinfo,我需要浏览计算机上的各种目录(通过DirectoryInfo)。其中一些无法访问,并且会发生UnauthorizedAccessException。如何在不捕获异常的情况下检查目录访问?您需要使用安全性命名空间 看看答案 答案如下: FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); if(!SecurityManager.IsGranted(writeP

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

您需要使用
安全性
命名空间

看看答案

答案如下:

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
处理的是安全策略而不是文件系统权限,因此您需要使用。

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

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


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

我尝试了以下操作:Dim readPermission As New FileIOPermission(FileIOPermissionAccess.Read,“C:\Users\Admin\Documents\My Pictures”)上述目录访问尝试产生“拒绝访问”,但“已授予SecurityManager.isPermission(readPermission)”始终返回true。From:
权限的授予由策略决定,并且与受覆盖的请求(如断言)不同。另外,isgranded只测试调用代码程序集的授权,与堆栈上的其他调用方无关。
这不是正确答案。FileIOPermission处理CA,而不是文件系统。换句话说,.NET安全策略是否允许访问。您可以拥有CAS访问权限,但Windows仍可以拒绝它。需要DirectoryInfo.GetAccessControl()。@HansPassant DirectoryInfo.GetAccessControl()可能在
未授予读取权限时引发异常。但仍有权列出文件夹内容。在这种情况下,GetAccessControl()没有帮助。为了防止有人感兴趣,我使用