在.NET中,检查当前用户是否可以写入目录

时间:2012-01-12 20:45:48

标签: .net permissions

在.NET中,有一种简单的方法可以检查当前用户是否有权在目录中创建文件?等同于C ++ _access函数的东西是理想的。

我不想使用反复试验(创建一个虚拟文件然后删除它):除了看似hackish之外,其他软件正在监视有问题的目录以查找丢弃的文件。

我不想使用System.DirectoryServices:查看ACL,解析组成员身份以及来自不同组成员身份的权限如何交互似乎容易出错且太难。在某个地方肯定有一个是或否的功能,不是吗?

提前致谢!

[编辑]作为奖励,如果它也适用于网络共享,那就太酷了。

3 个答案:

答案 0 :(得分:5)

FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
if (SecurityManager.IsGranted(writePermission)){
    //write here
} else {
    //some error message
}

答案 1 :(得分:5)

提前检查许可是一个冒险的项目。更不用说复杂,贯穿整个ACL列表并计算有效权限集。

此外......没有任何保证。仅仅因为您提前主动检查了权限并不意味着在您尝试创建文件时权限不会发生变化。

“正确”的方式是通过创建security demand的适当实例并调用其FileIOPermissionAttribute方法,以FileIOPermission或命令式声明地生成Demand()。如果您具有所需权限,则对Demand()的调用会成功;否则它会抛出SecurityException,你需要捕捉并采取行动。

根据我的经验,命令性检查更容易。

还应该注意的是,在Windows 7中,虽然您可能在概念上具有对目录的写入权限,但除非您使用提升的权限运行,否则它仍然可能无效。

答案 2 :(得分:0)

以下内容将返回DirecotrySecurity实例http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.directorysecurity.aspx

DirectoryInfo(pathstr).GetAccessControl()