我有一个在临时目录中写入文件的进程。该文件是在没有共享读取权限的情况下写入的,因此如果有人在写入文件时试图读取该文件,则 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/