文件访问问题

jwa*_*zko 1 .net c# permissions

在写入文件之前:

using (StreamWriter outfile = new StreamWriter(filePath, false, System.Text.Encoding.UTF8))
{
    outfile.Write(content);            
}
Run Code Online (Sandbox Code Playgroud)

我正在检查文件写使用这个:

public bool CheckIfAccessToFileIsGranted(string filePath)
{
     try
     {
        new FileIOPermission(FileIOPermissionAccess.Write, filePath).Demand();
        return true;
     }
     catch (SecurityException)
     {
        return false;
     }
}
Run Code Online (Sandbox Code Playgroud)

尽管上面的函数授予我评估(返回true),但是在打开流时我收到了UnauthorizedAccessException.为什么?

问候

Jar*_*Par 6

这里的问题是您将代码访问安全性(CAS)与文件系统权限混淆.前者是仅适用于CLR进程的限制,而后者是操作系统级别限制.这两种安全方法彼此独立(尽管文件系统信息可以促成CAS策略).

在这种情况下,UnauthorizedAcessException表示文件系统中缺少权限,但您尝试使用CAS检查来保护它,这将无效.

在文件系统级别(不包括CAS),尝试验证操作的操作将会或者不会成功,实际上是徒劳的.没有办法正确地执行此操作,因为许多外部实体可以在检查和尝试访问之间更改文件系统.只是尝试访问文件并捕获因访问失败而导致的异常,这样更可靠.

这是我在这个问题上写的详细博客文章的链接