【问题标题】:Write permissions on a folder or UNC path in c#在 c# 中对文件夹或 UNC 路径的写入权限
【发布时间】:2023-04-02 08:13:01
【问题描述】:

有什么方法可以检查给定路径是否有可用的写入权限,该路径可以是本地文件夹 (c:\temp) 或 UNC (\server\share)?我不能使用 try/catch,因为我可能有写权限但没有删除权限,所以我无法删除创建的文件...

【问题讨论】:

  • 权限可以在您的应用程序运行期间更改。或者网络可能会在写入之后但在删除之前关闭。您必须弄清楚如何处理这些情况无论如何 - 为什么要编写更多代码?

标签: c# directory file-permissions unc


【解决方案1】:

您使用权限要求,因此:

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"

一点 google-fu 表明这个 CodeProject 类可能有用,但是:http://www.codeproject.com/Articles/14402/Testing-File-Access-Rights-in-NET-2-0

【讨论】:

  • 这两种解决方案都不适用于 UNC。我有一个具有读取访问权限但没有写入权限的 UNC 路径。如果我将该路径传递给上面的代码,两者都为 Write 返回正值。
  • 是的......显然,我们在几年前就发现了这种情况:D -- stackoverflow.com/questions/5732347/…。看起来您需要直接查看 ACL。这可能有效:codeproject.com/Articles/14402/…。我已经修改了我的答案以反映相同的情况。
  • 感谢您的帮助,但这也没有用...我猜我得即兴发挥了。
【解决方案2】:

是的,您可以使用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 路径中不起作用
猜你喜欢
  • 2018-06-10
  • 2011-08-21
  • 1970-01-01
  • 2011-06-25
  • 2011-06-01
  • 2014-04-10
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
相关资源
最近更新 更多