为什么FileShare不按预期工作?

时间:2011-08-20 14:24:06

标签: c# windows file-io

在编写处理日志和文件的代码时,我发现了一些令人困惑的行为在windows文件中。有谁知道为什么这个测试会因“无法读取文件”消息而失败?

[TestMethod]
public void SouldAllowReads()
{
    using (var file = File.Open(_path, FileMode.Create, FileAccess.Write, FileShare.Read))
    {
        using (var file2 = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            //works ok, doesn't throw
        }

        try
        {
            using (var file3 = File.Open(_path, FileMode.Open, FileAccess.Read, FileShare.Read))
            { 
                //fails
            }
        }
        catch (IOException)
        {
            Assert.Fail("cannot read file");
        }
    }
}

PS。 _path = Path.GetTempFileName();

编辑:

我将elevener的答案标记为正确答案,但在这个设计中有一件事困扰我。诸如File.ReadAllText(_path)之类的.NET方法抛出异常,这是不应该发生的。

例如,这个剪断我的测试也会失败断言:

        try
        {
            string text = File.ReadAllText(_path);
        }
        catch (IOException)
        {
            Assert.Fail("cannot read file");
        }

1 个答案:

答案 0 :(得分:3)

您使用FileAccess.Write打开var file =,同时尝试使用不允许并发写访问的文件共享模式FileShare.Read打开var file3 =。