c# - 为什么 FileShare 不能按预期工作?

标签 c# windows file-io

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

[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");
        }
    }
}

附言。 _path = Path.GetTempFileName();

编辑:

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

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

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

最佳答案

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

关于c# - 为什么 FileShare 不能按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132348/

相关文章:

C# 获取字符串中两个字符之间的字符串

c# - 验证多个控件 Asp.Net

Windows Store App 使用私钥解密

vb.net - 如何发现 Windows 更新是可选的、推荐的还是重要的

c++ - ReadFile 只读取一个缓冲区字符?

java - 在更新程序中引用文件(Java)

c# - 如何清除 asp.net 中的服务器缓存?

c# - 什么是用于加载系统配置属性的 .net 层次结构

windows - NSBitmapImageRep生成的BMP无法在Windows上读取

java - 如何修复因扫描仪错误读取文件而导致的 InputMismatchException 错误?