在c#中的文件夹或UNC路径写入权限
任何方式来检查给定的路径,可能是本地文件夹(c:\ temp)或UNC(\ server \ share)上写权限是否可用?我不能用try/catch语句,因为我可能会写权限,但不能删除,所以我将无法删除创建的文件...在c#中的文件夹或UNC路径写入权限
是的,你可以使用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
}
没有写访问权限的UNC没有工作... – 2013-03-12 19:21:48
您使用权限要求,即:
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",detials。
一点谷歌福认为,这CodeProject上的类可能是有用的,但:http://www.codeproject.com/Articles/14402/Testing-File-Access-Rights-in-NET-2-0
这两种解决方案都不适用于UNC。我有一个UNC路径具有读取权限但不能写入。如果我将该路径传递给上面的代码,则两者都返回Write。 – 2013-03-12 19:21:24
是的......显然,我们在几年前就已经发现这种情况:D - http://stackoverflow.com/questions/5732347/testing-a-unc-paths-accessability。看起来你需要直接看ACL。这可能工作:http://www.codeproject.com/Articles/14402/Testing-File-Access-Rights-in-NET-2-0。我已经修改了我的答案以反映相同。 – 2013-03-12 21:34:20
欣赏你的帮助,但那也行不通......我不得不即兴即兴。 – 2013-03-13 17:52:28
权限可以在你的应用程序运行时间而改变。或者在写入之后但删除之前网络可能会关闭。你必须研究如何处理这些情况*无论如何* - 为什么要写更多的代码? – 2013-03-12 18:02:04