首页 > 解决方案 > 我可以同时将多个 FileStream 对象制作成一个文件吗?

问题描述

为什么在 fs2 对象中抛出错误?我已经在 fs 对象中编写了 FileShare.ReadWrite

     FileStream fs = new FileStream("hello.txt",FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.ReadWrite);

        mama();

        Console.ReadKey();

    }
    static void mama()
    {
        FileStream fs2 = new FileStream("hello.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);
        fs2.Read(new byte[3], 0, 3);
    }

谁能告诉我为什么会出现这个错误?

错误 = 进程无法访问文件 'C:\Users\iP\documents\visual studio 2015\Projects\ConsoleApplication32\ConsoleApplication32\bin\Debug\hello.txt',因为它正被另一个进程使用。

标签: c#filestream

解决方案


您收到该错误是因为您正在传递FileShare.None给第二个电话。如果您将其更改FileShare.ReadWrite为匹配第一个呼叫,您将不会遇到该问题。

这样做的原因是因为FileStream构造函数在下面调用CreateFileW,如果您查看该函数的文档,它会指出:

您不能请求与具有打开句柄的现有请求中指定的访问模式冲突的共享模式。 CreateFile将失败,GetLastError 函数将返回 ERROR_SHARING_VIOLATION

您已经有一个使用FileAccess.ReadWrite作为访问模式的第一个请求的打开句柄,这与FileShare.None第二个调用冲突。


推荐阅读