代码之家  ›  专栏  ›  技术社区  ›  A9S6

文件流:由另一个进程错误使用

  •  8
  • A9S6  · 技术社区  · 16 年前

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

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

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

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

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

    3 回复  |  直到 13 年前
        1
  •  25
  •   curtisk    16 年前

    在只读取文件的文件流上,需要将其设置为

    FileShare.ReadWrite

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

    另一方面,原始的文件流将无法写回它……它只是在两个流之间来回截击,确保您将另一个需要的内容交回。

        2
  •  0
  •   Timmo    16 年前

    当使用两个读/写同一文件的文件流时,需要使用filestreamname.open();和filestreamname.close();命令,因为您不能异步读和写文件。

        3
  •  0
  •   Thomas Levesque    16 年前

    打开第二个时 FileStream ,您还需要指定 FileShare.Read ,否则它将尝试以独占访问方式打开它,并将失败,因为该文件已打开。