.net - 在 %temp% 中读取文件时出现随机 UnauthorizedAccessException

标签 .net exception

我有一个在临时目录中写入文件的进程。该文件是在没有共享读取权限的情况下写入的,因此如果有人在写入文件时试图读取该文件,则 IOException会被抛出,这很好。

在极少数情况下,我似乎收到 UnauthorizedAccessException在尝试读取此文件时。我相当确定(从日志中)该文件没有被写入,但我看不出有任何其他原因我无法访问它。

此外,该进程从 Visual Studio 扩展运行,这意味着它具有与父进程(Visual Studio 本身)相同的权限。

这是我尝试打开文件的方法:

new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read);

有时,这一行会抛出 UnauthorizedAccessException .任何想法为什么?

最佳答案

这绝对不是共享问题,它会生成共享冲突错误并报告 IOException。

UnauthorizedAccessException 只有两个不错的解释。一种是逻辑上的,文件是使用自定义 ACL 创建的,该 ACL 只是拒绝访问。在这种情况下,您需要更多地了解创建文件的过程并将其重击一遍,以便它停止执行此操作。控制该进程使用的用户帐户可能很重要。

第二种解释与许多进程在 TEMP 目录中创建文件和目录的变幻莫测有关。在那里创建的文件是事务性的,并且允许系统生成文件名,从而确保永远不会发生名称冲突,这一点非常重要。让一个进程创建一个文件并允许另一个进程打开它是自找麻烦。当 TEMP 目录包含与您尝试打开的文件同名的目录时,您将收到 UnauthorizedAccessException。

如果这种情况很少发生并且文件很快又消失了,那么调试这个问题就很棘手。您可以 enable auditing记录打开文件的失败尝试。

关于.net - 在 %temp% 中读取文件时出现随机 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609996/

相关文章:

java - 从类内的多个方法捕获异常

c# - 使用 SqlCommand.Parameters.AddWithValue 时应该包括 @ 吗?

c# - 使用 MVVM 时的 WPF 绑定(bind)问题

asp.net - 更新绝对过期的缓存项

java - 抛出异常会改变它的状态吗?

exception - Kotlin 协程无法处理异常

java - 使用构建器模式创建异常?

.net - System.ExecutionEngineException 失败

c# - 如何创建一个空的 IReadOnlyCollection

.net - 是否可以通过代码在我的 Azure 帐户上创建新的 Web 应用程序和数据库?