有什么方法可以检查给定路径上是否有可用的写权限,该路径可能是本地文件夹 (c:\temp) 或 UNC (\server\share)?我不能使用 try/catch,因为我可能有写权限但没有删除权限,所以我无法删除创建的文件......
问问题
2933 次
2 回答
3
您使用权限需求,因此:
FileIOPermission f2 = new FileIOPermission(FileIOPermissionAccess.Read, "C:\\test_r");
f2.AddPathList(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, "C:\\example\\out.txt");
try
{
f2.Demand();
// do something useful with the file here
}
catch (SecurityException s)
{
Console.WriteLine(s.Message);
// deal with the lack of permissions here.
}
指定所需的权限和所需的文件系统对象。如果您没有所需的权限,则会引发安全异常。更多细节在
- http://support.microsoft.com/kb/315529
- http://msdn.microsoft.com/en-us/library/system.security.permissions.fileiopermission.aspx
由于各种原因——竞争条件就是其中之一——它比检查 NTFS 文件系统权限看起来要复杂得多。
显然,我们不久前发现这是 UNC 路径的无操作。请参阅这个问题,Testing a UNC Path's "Accessability",了解详情。
一点 google-fu 建议这个 CodeProject 类可能有用,但是: http: //www.codeproject.com/Articles/14402/Testing-File-Access-Rights-in-NET-2-0
于 2013-03-12T18:03:55.530 回答
3
是的,您可以使用FileIOPermission
类和FileIOPermissionAccess
枚举。
FileIOPermissionAccess.Write
:
有权写入或删除文件或目录。写访问包括删除和覆盖文件或目录。
FileIOPermission f = new FileIOPermission(FileIOPermissionAccess.Write, myPath);
try
{
f.Demand();
//permission to write/delete/overwrite
}
catch (SecurityException s)
{
//there is no permission to write/delete/overwrite
}
于 2013-03-12T18:05:47.850 回答