对目录附加和写入访问权限 — FileIOPermission 给出不好的结果?
Posted
技术标签:
【中文标题】对目录附加和写入访问权限 — FileIOPermission 给出不好的结果?【英文标题】:Append and write access to a Directory — FileIOPermission give not good result? 【发布时间】:2014-03-04 14:30:57 【问题描述】:我有一个问题实际上已经解决了,但我完全不明白为什么会这样。
所以我有一个网络共享,我只想验证我是否有权在该共享中创建新文件和目录。我使用了两种方法来解决这个问题,但在这两种方法中我得到了不同的结果。我的测试用例是我无法在该共享上创建文件和目录:
试图创建一个新的目录——不是一个好方法
try
var testPath = Path.Combine(path, testDirectory)
Directory.CreateDirectory(testPath)
catch
// No access
这是我完全不喜欢的一种方式,但它确实有效......我这里有一个例外,所以它正确地表示我没有特定路径的权限。
使用 FileIOPermission — 更好的方式
try
var writePermission = new FileIOPermission(FileIOPermissionAccess.Write, path)
var appendPermission = new FileIOPermission(FileIOPermissionAccess.Append, path)
writePermission.Demand()
appendPermission.Demand()
catch
// No access
使用这种方法我没有任何例外,所以它告诉我我有权创建新文件 - 这实际上是不正确的。
有人知道第二种方法有什么问题吗?
【问题讨论】:
【参考方案1】:如果您想要简单、易于维护和易于理解的代码,除了尝试做您想做的事情并处理您期望的异常(例如 UnauthorizedAccessException)之外,没有其他安全的替代方法。
通过显式处理 UnauthorizedAccessException 并忽略其余部分,您可以在发生这种情况时执行您的回退逻辑,并且异常会冒泡并且可能未经处理而导致应用程序停止(您的示例 1)。您的示例 2 似乎打破了关于如何处理运行时错误的 .NET 运行时联系。
.NET 和托管运行时期望您相应地使用和处理异常。见http://msdn.microsoft.com/en-us/library/8ey5ey87%28v=vs.91%29.aspx
我希望这至少对您有所帮助。
【讨论】:
【参考方案2】:FileIOPermission 不检查文件/目录的实际权限。它更像是“如果我不必担心 ACL,我可以访问它吗?”检查。
查看this post 以了解 FileIOPermission 到底在做什么。
然后,查看this post 以了解如何询问实际的文件系统 ACL 以查看您是否可以读取/写入文件。
【讨论】:
以上是关于对目录附加和写入访问权限 — FileIOPermission 给出不好的结果?的主要内容,如果未能解决你的问题,请参考以下文章