在同一个FileStream上打开2个流的奇怪行为

时间:2014-09-05 00:41:12

标签: c# stream filestream

我在同一个基础BinaryReader上打开了BinaryWriterFileStream。当我使用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属性在FileStreamBinaryWriter.BaseStream中显示正确的值,当我在Seek之后立即检查它们时,它仍在写入流的开头

我还注意到,在使用BinaryReader执行搜索和读取之后,最初写入流的数据向前移位4个字节,用0填充前4个字节。

可能导致这种奇怪行为的原因是什么?一次使用两个流有效吗?

更新

如果我使用MemoryStream代替然后将数据写入我的文件,那么一切正常。那么为什么会发生FileStream而不是MemoryStream

0 个答案:

没有答案