簡體   English   中英

同時讀寫二進制文件

[英]Simultaneously read and write binary file

我想同時讀寫二進制文件,但是每當嘗試這樣做時,我總是會收到一個異常,指出該文件已被其他進程使用。 我知道如何使用普通的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))

您需要使用可以提供FileShare模式的FileStream 構造函數重載

查看MSDN關於FileShare.ReadWrite模式的狀態:

允許隨后打開文件以進行讀取或寫入。 如果未指定此標志,則打開文件以進行讀取或寫入的任何請求(通過此過程或其他過程)都將失敗,直到關閉文件為止。 但是,即使指定了此標志,訪問文件仍可能需要其他權限。

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

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

您要打開文件兩次-一次用於讀取,一次用於寫入。 這意味着一個FileStream需要FileAccess.ReadFileShare.Write而另一個需要FileAccess.WriteFileShare.Read 使用已經有Integer和使用BinaryWriter寫入String的文件來測試和驗證此代碼:

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對象執行的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM