【发布时间】:2010-11-29 11:19:48
【问题描述】:
在 C# 中,System.IO.File.Delete(filePath) 将删除指定文件或引发异常。如果当前用户没有删除文件的权限,则会引发 UnauthorizedAccessException。
有什么方法可以让我提前判断删除是否可能引发 UnauthorizedAccessException(即查询 ACL 以查看当前线程的身份是否有权删除指定文件?)
我基本上想做:
if (FileIsDeletableByCurrentUser(filePath)) {
/* remove supporting database records, etc. here */
File.Delete(filePath);
}
但我不知道如何实现 FileIsDeletableByCurrentUser()。
【问题讨论】:
-
处理竞争条件非常困难。如果在您评估
FileIsDeletableByCurrentUser时文件“可以”删除,但在此之后,其他进程锁定了文件怎么办? -
如果文件被其他进程(例如 IIS 或 office)打开,您也无法删除该文件。这可能是相同的例外,但您无法仅通过查看权限来判断
-
您确定仅对特定异常使用 try/catch 不是处理此问题的正确方法吗?看来您正在尝试在这里重新发明轮子。
-
带有最终解决方案的示例代码?
-
如果您想自己编写代码检查权限,此 Microsoft 文档链接一定会有所帮助:docs.microsoft.com/en-us/dotnet/api/…
标签: c# security permissions .net