如何在没有尝试的情况下检查File.Delete()是否会成功,在C#中?

Dyl*_*tie 30 .net c# security permissions

在C#中,System.IO.File.Delete(filePath)将删除指定的文件,或引发异常.如果当前用户没有删除文件的权限,则会引发UnauthorizedAccessException.

有没有什么方法可以提前判断删除是否可能抛出UnauthorizedAccessException(即查询ACL以查看当前线程的标识是否有权删除指定的文件?)

我基本上是想做:

if (FileIsDeletableByCurrentUser(filePath)) {
    /* remove supporting database records, etc. here */
    File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何实现FileIsDeletableByCurrentUser().

Jar*_*Par 17

实施的问题FileIsDeletableByCurrentUser是不可能这样做.原因是文件系统是一个不断变化的项目.

在您对文件系统进行的任何检查和下一次操作之间,可以并且将要发生任何数量的事件.包含 ...

  • 文件的权限可能会更改
  • 该文件可能被删除
  • 该文件可能被另一个用户/进程锁定
  • 可以删除文件所在的USB密钥

您可以编写的最佳功能最适合命名FileWasDeletableByCurrentUser.

  • 投票,因为你提出的功能名称既幽默又富有洞察力. (2认同)

Dal*_*ale 8

您是否尝试过System.IO.File.GetAccessControl(filename)它应该返回一个FileSecurity,其中包含有关该文件权限的信息.