为什么TextReader在另一个进程打开文件时会抱怨?

时间:2014-05-21 08:29:05

标签: c# file file-io

请参阅下面的简单单元测试示例

[Test]
public void TextReaderRequiresWriteAccessToFile()
{
    using (var reader = File.OpenText(Path.Combine(Folder, "Texts.txt")))
    {
    }
}

当我在编辑器中打开文本文件时,此测试失败。我希望File.OpenText能够以读取权限打开该文件。

  

System.IO.IOException:进程无法访问该文件   ' C:\ * *文件夹的位置* \ Texts.txt'   因为它正被另一个进程使用。

为什么.NET需要额外的权限才能通过此API打开文件进行读取?

2 个答案:

答案 0 :(得分:4)

哦,但它只需要读取权限。

问题在于编辑器甚至阻止了读访问(在.NET中,这将是FileShare.None - 写访问的默认值。如果你在两种情况下使用OpenText打开文件,而不是使用编辑器,它就可以正常工作。所以你可能想要一个没有锁定文件的编辑器(例如,Visual Studio)。

这不是.NET的问题 - 编辑器禁止您打开文件进行完全阅读。您可能希望了解一下共享文件访问权限。

答案 1 :(得分:2)

当您的文件在文本编辑器中打开时,它会打开一个句柄。这意味着,您需要使用FileShare.Read明确打开文件。这样,当文件在其他地方以读/写模式打开时,您将获得读访问权。

using (var reader = File.OpenText(Path.Combine(Folder, "Texts.txt"), FileMode.Open, FileAccess.Read, FileShare.Read))
{
}