C# 同时读写二进制文件
我想同时写入和读取二进制文件,但每当我尝试这样做时,总会出现一个异常,表明该文件已被另一个进程使用。我知道如何使用普通的C# 同时读写二进制文件,c#,.net,vb.net,io,binary,C#,.net,Vb.net,Io,Binary,我想同时写入和读取二进制文件,但每当我尝试这样做时,总会出现一个异常,表明该文件已被另一个进程使用。我知道如何使用普通的FileStream,但是使用BinaryReader和BinaryWriter它不起作用 有人知道如何同时读写二进制文件吗 到目前为止我所做的: FileSt=newfilestream(“file.bin”、FileMode.Create、FileAccess.ReadWrite) writer=新的二进制writer(FileSt,enc) reader=newbinar
FileStream
,但是使用BinaryReader
和BinaryWriter
它不起作用
有人知道如何同时读写二进制文件吗
到目前为止我所做的:
FileSt=newfilestream(“file.bin”、FileMode.Create、FileAccess.ReadWrite)
writer=新的二进制writer(FileSt,enc)
reader=newbinaryreader(File.Open(“File.bin”,FileMode.Open))
您需要使用能够提供模式的文件流
查看MSDN对FileShare.ReadWrite
模式的说明:
允许随后打开文件进行读取或写入。如果这
未指定标志,任何打开文件以进行读取或删除的请求
写入(通过此进程或其他进程)将失败,直到文件
关门了。但是,即使指定了此标志,附加的
访问该文件可能仍然需要权限
FileStream blah = new FileStream("file.bin", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
您需要使用能够提供模式的FileStream
查看MSDN对FileShare.ReadWrite
模式的说明:
允许随后打开文件进行读取或写入。如果这
未指定标志,任何打开文件以进行读取或删除的请求
写入(通过此进程或其他进程)将失败,直到文件
关门了。但是,即使指定了此标志,附加的
访问该文件可能仍然需要权限
FileStream blah = new FileStream("file.bin", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
您需要在文件上设置文件共享模式
FileStream blah = new FileStream("file.bin", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
您需要在文件上设置文件共享模式
FileStream blah = new FileStream("file.bin", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
您将打开文件两次—一次用于读取,一次用于写入。这意味着一个FileStream
需要FileAccess.Read
和FileShare.Write
,而另一个需要FileAccess.Write
和FileShare.Read
。使用已使用二进制编写器写入整数和字符串的文件测试和验证此代码:
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
对象执行的操作。您将打开文件两次,一次用于读取,一次用于写入。这意味着一个FileStream
需要FileAccess.Read
和FileShare.Write
,而另一个需要FileAccess.Write
和FileShare.Read
。使用已使用二进制编写器写入整数和字符串的文件测试和验证此代码:
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
对象执行的操作。fidemrazizer:即使使用FileShare.ReadWrite,我也可以执行相同的操作error@Eggord我对此表示怀疑。事实上,您正在使用不同的标志打开整个文件两次。尝试使用FileShare.ReadWrite
打开这两个文件,然后查看发生了什么FidemRazer:即使使用FileShare.ReadWrite,我也会得到相同的结果error@Eggord我对此表示怀疑。事实上,您正在使用不同的标志打开整个文件两次。尝试使用FileShare.ReadWrite
打开这两个文件,并查看在提供的答案之后发生的情况。如果您打算打开同一个文件两次,一次用于阅读,一次用于写入,则应使用FileAccess.Read
作为一个文件,另一个使用FileAccess.Write
。另外,不要用FileStream
构造函数打开文件一次,也不要用file.open打开文件一次。保持一致,两次使用相同的方法。此外,使用
块打开文件,这样当您使用完文件后,它就可以隐式关闭。根据提供的答案,如果您打算打开同一文件两次,一次用于读取,一次用于写入,那么您应该使用
文件访问。读取
一次,写入
另一次。另外,不要用FileStream
构造函数打开文件一次,也不要用file.open打开文件一次。保持一致,两次使用相同的方法。另外,使用
块打开带有的文件,以便在完成后可以隐式关闭该文件。正如其他人所指出的,还需要更改第二次打开:FileStream binaryReaderFile=file.open(“file.bin”,FileMode.open,FileAccess.Read,FileShare.ReadWrite);正如其他人所指出的,您还需要更改第二个打开:FileStream binaryReaderFile=File.open(“File.bin”,FileMode.open,FileAccess.Read,FileShare.ReadWrite);