【问题标题】:FileStream: used by another process errorFileStream:被另一个进程错误使用
【发布时间】:2010-03-05 13:19:31
【问题描述】:

我有两个不同的模块需要访问单个文件(一个将具有读写访问权限 - 其他只有读取权限)。该文件是在其中一个模块中使用以下代码打开的:

FileStream fs1 = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.Read);

问题是第二个模块在尝试使用以下代码打开同一个文件时失败:

FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read);

我需要在这里设置一些额外的安全参数吗?

【问题讨论】:

    标签: c# .net file-io filestream


    【解决方案1】:

    在只读取文件的FileStream上,需要设置为

    FileShare.ReadWrite

    FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
    

    否则原始的 FileStream 将无法写回它...它只是两个流之间来回的齐射,请确保您交回其他需要的东西

    【讨论】:

    • +1:好的,但我不知道为什么。第一个 FileStream 是否能够在第二个打开时保存?
    • 通过快速测试,我能够写入第一个然后关闭流,而另一个打开并且 CanRead 状态返回 true....所以看起来是这样,是的跨度>
    • 请注意,即使您打开 FileAccess.Read ,您也需要指定 FileShare.ReadWrite ,如果另一个人已经使用 FileShare.ReadWrite 打开了它。所有文件流必须具有相同的文件共享模式。
    【解决方案2】:

    打开第二个FileStream时,还需要指定FileShare.Read,否则会尝试以独占方式打开,会因为文件已经打开而失败

    【讨论】:

    • 试过了,但没用:FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read, FileShare.Read);
    【解决方案3】:

    你需要使用 filestreamname.Open();和 filestreamname.close();使用 2 个读取/写入同一文件的文件流时的命令,因为您无法异步读取和写入文件。

    【讨论】: