我想同时编写和读取二进制文件,但每当我尝试这样做时,我总会得到一个异常,说明该文件已被其他进程使用。我知道如何使用普通FileStream
进行操作,但使用BinaryReader
和BinaryWriter
它无法正常工作。
有人知道如何同时读写二进制文件吗?
到目前为止我做了什么:
FileSt = New FileStream("file.bin", FileMode.Create,FileAccess.ReadWrite)
writer = New BinaryWriter(FileSt, enc)
reader = New BinaryReader(File.Open("file.bin", FileMode.Open))
答案 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.Read
和FileShare.Write
而另一个需要FileAccess.Write
和FileShare.Read
。此代码经过测试和验证,文件已使用Integer
写入String
和BinaryWriter
:
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
请注意,您应该只指定Read
或Write
,如果需要的话。如果您知道自己会或可能需要两者,请仅指定ReadWrite
。 FileAccess
值是FileStream
对文件执行或可能执行的操作,而FileShare
值适用于允许在同一文件上打开的其他FileStream
个对象的内容做。