5

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

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

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

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

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

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

4

2 回答 2

3

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

UnauthorizedAccessException 只有两种体面的解释。一个是合乎逻辑的,该文件是使用简单拒绝访问的自定义 ACL 创建的。在这种情况下,您将需要更多地了解创建文件的过程并将其敲在头上,以便它停止这样做。控制该进程使用的用户帐户可能很重要。

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

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

于 2013-09-09T11:39:09.943 回答
0

就个人而言,我会运行 ProcMon http://technet.microsoft.com/en-gb/sysinternals/bb896645.aspx并为您的文件添加过滤器,看看是否有其他东西访问该文件并妨碍您的代码。

于 2013-09-04T10:16:52.547 回答