2013-03-12 139 views
0

任何方式来检查给定的路径,可能是本地文件夹(c:\ temp)或UNC(\ server \ share)上写权限是否可用?我不能用try/catch语句,因为我可能会写权限,但不能删除,所以我将无法删除创建的文件...在c#中的文件夹或UNC路径写入权限

+0

权限可以在你的应用程序运行时间而改变。或者在写入之后但删除之前网络可能会关闭。你必须研究如何处理这些情况*无论如何* - 为什么要写更多的代码? – 2013-03-12 18:02:04

回答

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 
} 
+0

没有写访问权限的UNC没有工作... – 2013-03-12 19:21:48

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. 
} 

指定所需的权限和所需的文件系统对象。如果您没有要求的权限,则会引发安全异常。在

更多细节对于各种原因—竞争条件是其中—一个很复杂得多,它似乎检查NTFS文件系统权限。

很显然,我们后来发现,这是UNC路径的禁用操作。看到这个问题,Testing a UNC Path's "Accessability",detials。

一点谷歌福认为,这CodeProject上的类可能是有用的,但:http://www.codeproject.com/Articles/14402/Testing-File-Access-Rights-in-NET-2-0

+0

这两种解决方案都不适用于UNC。我有一个UNC路径具有读取权限但不能写入。如果我将该路径传递给上面的代码,则两者都返回Write。 – 2013-03-12 19:21:24

+0

是的......显然,我们在几年前就已经发现这种情况: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

+0

欣赏你的帮助,但那也行不通......我不得不即兴即兴。 – 2013-03-13 17:52:28