在%temp%中读取文件时出现Random UnauthorizedAccessException

Iga*_*nik 5 .net exception

我有一个将文件写入临时目录的进程.正在写入文件而没有共享读取访问权限,因此如果有人在写入文件时尝试读取该文件,IOException则会抛出该文件,这很好.

在一些罕见的情况下,我似乎UnauthorizedAccessException在尝试阅读此文件时得到了.我相当肯定(从日志中)文件没有写入,但我看不到任何其他原因我无法访问它.

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

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

new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
Run Code Online (Sandbox Code Playgroud)

有时候,这条线会抛出一条线UnauthorizedAccessException.有什么想法吗?

Han*_*ant 3

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

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

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

如果这种情况很少发生并且文件很快再次消失,则调试此问题会很棘手。您可以启用审核来记录打开文件的失败尝试。