同时读写二进制文件

时间:2016-08-03 21:57:24

标签: c# .net vb.net io binary

我想同时编写和读取二进制文件,但每当我尝试这样做时,我总会得到一个异常,说明该文件已被其他进程使用。我知道如何使用普通FileStream进行操作,但使用BinaryReaderBinaryWriter它无法正常工作。

有人知道如何同时读写二进制文件吗?

到目前为止我做了什么:

FileSt = New FileStream("file.bin", FileMode.Create,FileAccess.ReadWrite)
writer = New BinaryWriter(FileSt, enc)
reader = New BinaryReader(File.Open("file.bin", FileMode.Open))

3 个答案:

答案 0 :(得分:2)

您需要使用可提供constructor overload模式的FileStream FileShare

了解MSDN对FileShare.ReadWrite模式的说明:

  

允许随后打开文件进行读写。如果这   未指定flag,任何打开文件进行读取的请求或   写入(通过此过程或其他过程)将失败直到该文件   关闭了。但是,即使指定了此标志,也需要额外的   访问该文件可能仍需要权限。

答案 1 :(得分:0)

您需要在文件上设置FileShare模式。

        FileStream blah = new FileStream("file.bin", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);

答案 2 :(得分:0)

您打开文件两次 - 一次用于阅读,一次用于写入。这意味着一个FileStream需要FileAccess.ReadFileShare.Write而另一个需要FileAccess.WriteFileShare.Read。此代码经过测试和验证,文件已使用Integer写入StringBinaryWriter

Dim filePath As String = Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments, "Test.bin")

Using source = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Write),
      destination = File.Open(filePath, FileMode.Open, FileAccess.Write, FileShare.Read),
      reader As New BinaryReader(source),
      writer As New BinaryWriter(destination)
    Dim n = reader.ReadInt32()

    writer.Write(98765)
    writer.Write("What's up doc?")

    Dim sz = reader.ReadString()
End Using

请注意,您应该只指定ReadWrite,如果需要的话。如果您知道自己会或可能需要两者,请仅指定ReadWriteFileAccess值是FileStream对文件执行或可能执行的操作,而FileShare值适用于允许在同一文件上打开的其他FileStream个对象的内容做。