我有一个将文件写入临时目录的进程。正在编写文件而没有共享读访问权限,因此如果有人在编写文件时尝试读取该文件,则会抛出IOException
,就没问题。
在极少数情况下,我在尝试阅读此文件时似乎正在获取UnauthorizedAccessException
。我相当肯定(从日志中)文件没有被写入,但我看不到任何其他原因我无法访问它。
此外,该过程从Visual Studio扩展运行,这意味着它具有与父进程(Visual Studio本身)相同的权限。
以下是我尝试打开文件的方式:
new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
有时,此行会抛出UnauthorizedAccessException
。有什么想法吗?
答案 0 :(得分:3)
绝对不是共享问题,会产生共享冲突错误,并且会报告IOException。
UnauthorizedAccessException只有两个不错的解释。一个是逻辑的,文件是使用自定义ACL创建的,它只是拒绝访问。在这种情况下,您需要了解更多关于创建文件的过程并将其重置到头部,以便它停止这样做。控制该进程使用的用户帐户可能很重要。
第二种解释与在TEMP目录中创建文件和目录的许多进程的变幻莫测有关。在那里创建的文件是事务性的,并且允许系统生成文件名,从而确保永远不会发生名称冲突,这一点非常重要。有一个进程创建一个文件,并允许另一个文件打开它是一个麻烦。当TEMP目录包含与您尝试打开的文件同名的目录时,您将收到UnauthorizedAccessException。
如果这种情况不经常发生并且文件很快再次消失,则调试此问题很棘手。您可以enable auditing记录打开文件的失败尝试。
答案 1 :(得分:0)
就个人而言,我运行ProcMon http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx并为您的文件添加过滤器,看看是否有其他内容访问该文件并妨碍您的代码。