请参阅下面的简单单元测试示例
[Test]
public void TextReaderRequiresWriteAccessToFile()
{
using (var reader = File.OpenText(Path.Combine(Folder, "Texts.txt")))
{
}
}
当我在编辑器中打开文本文件时,此测试失败。我希望File.OpenText
能够以读取权限打开该文件。
System.IO.IOException:进程无法访问该文件 ' C:\ * *文件夹的位置* \ Texts.txt' 因为它正被另一个进程使用。
为什么.NET需要额外的权限才能通过此API打开文件进行读取?
答案 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))
{
}