我在同一个基础BinaryReader
上打开了BinaryWriter
和FileStream
。当我使用BinaryWriter
寻找某个位置并写入一个值时,它会写在流的开头而不是上一行中寻找的位置。
我的代码(简化):
using (var stream = new FileStream(outputFile, FileMode.Create))
using (var sw = new BinaryWriter(stream))
using (var sr = new BinaryReader(stream))
{
int address;
int value;
//Write some data using sw
//Seek and read a few different places using sr,
//and set address and value
sw.BaseStream.Seek(address, SeekOrigin.Begin);
sw.Write(value);
}
Position
属性在FileStream
和BinaryWriter.BaseStream
中显示正确的值,当我在Seek之后立即检查它们时,它仍在写入流的开头
我还注意到,在使用BinaryReader
执行搜索和读取之后,最初写入流的数据向前移位4个字节,用0填充前4个字节。
可能导致这种奇怪行为的原因是什么?一次使用两个流有效吗?
更新
如果我使用MemoryStream
代替然后将数据写入我的文件,那么一切正常。那么为什么会发生FileStream
而不是MemoryStream
?