.NET-检查目录是否可以在没有异常处理的情况下访问
我需要浏览计算机上的各种目录(通过DirectoryInfo)。其中一些无法访问,并且会发生UnauthorizedAccessException。如何在不捕获异常的情况下检查目录访问?您需要使用.NET-检查目录是否可以在没有异常处理的情况下访问,.net,directoryinfo,.net,Directoryinfo,我需要浏览计算机上的各种目录(通过DirectoryInfo)。其中一些无法访问,并且会发生UnauthorizedAccessException。如何在不捕获异常的情况下检查目录访问?您需要使用安全性命名空间 看看答案 答案如下: FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename); if(!SecurityManager.IsGranted(writeP
安全性
命名空间
看看答案
答案如下:
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
我最近写了一篇关于这个主题的博客文章,这里有一些细节
权限的授予由策略决定,并且与受覆盖的请求(如断言)不同。另外,isgranded只测试调用代码程序集的授权,与堆栈上的其他调用方无关。
这不是正确答案。FileIOPermission处理CA,而不是文件系统。换句话说,.NET安全策略是否允许访问。您可以拥有CAS访问权限,但Windows仍可以拒绝它。需要DirectoryInfo.GetAccessControl()。@HansPassant DirectoryInfo.GetAccessControl()可能在未授予读取权限时引发异常。但仍有权列出文件夹内容。在这种情况下,GetAccessControl()没有帮助。为了防止有人感兴趣,我使用