对目录的附加和写入权限 - FileIOPermission给出不好的结果?

use*_*704 7 .net c# file-permissions directoryinfo

我有一个问题实际上已经解决了,但我完全不明白为什么它会像这样.

所以我有一个网络共享,我想简单地验证我是否有权在该共享中创建新文件和目录.我用了两种方法来解决这个问题,但两者都得到了不同的结果.我的测试用例是我无法在该共享上创建文件和目录:

试图创建一个新的目录 - 不是一个好方法

try
{
    var testPath = Path.Combine(path, testDirectory)
    Directory.CreateDirectory(testPath)
}
catch
{
    // No access
}
Run Code Online (Sandbox Code Playgroud)

这是一种我根本不喜欢的方式,但它有效...我在这里有一个例外,所以它正确地说我没有特定路径的权限.

使用FileIOPermission - 更好的方式

try
{
    var writePermission = new FileIOPermission(FileIOPermissionAccess.Write, path)
    var appendPermission = new FileIOPermission(FileIOPermissionAccess.Append, path)
    writePermission.Demand()
    appendPermission.Demand()
}
catch
{
    // No access
}
Run Code Online (Sandbox Code Playgroud)

通过这种方法,我没有任何异常,所以它告诉我,我有权创建新文件 - 实际上并非如此.

谁知道第二种方法有什么问题?

Nat*_*n R 1

FileIOPermission 不检查文件/目录的实际权限。这更像是“如果我不必担心 ACL,我是否能够访问它?” 查看。

查看这篇文章,了解 FileIOPermission 到底在幕后做什么。

然后,查看这篇文章,了解如何询问实际的文件系统 ACL 以查看是否可以读/写文件。