1

我对流有一些困难。我正在使用 FileStream 和 BinaryReader,但我遇到了一些奇怪的行为。首先(这是另一个问题,当使用 StreamReader 时,我得到了奇怪的行为,当我 Peek 时 psoition 改变了,所以我使用 BinaryReader 这很好)现在我有一个问题,有时当我做 Seek 时(使用当然底层的基本流 - FileStream)有时它工作正常(到达正确的位置)但有时它只是跳到一个超出文件长度的位置,它不会一直发生,例如我有一个问题到 1233*267 的位置,但一天后就好了,问题出在另一个地方。

FileStream m_fsReader = new FileStream(m_strDataFileName, FileMode.Open,         FileAccess.Read, FileShare.ReadWrite);
BinaryReader m_brReader = new BinaryReader(m_fsReader);

和寻找部分:

 m_fsReader.Seek(offset, SeekOrigin.Begin);

谢谢,

4

2 回答 2

1

我注意到每个 Stream 都保持自己的位置。当一个 Stream 从另一个流构造时,位置最初是相同的;但是如果第二个流寻找,它不会同步它的基本流位置。

尝试在读取和查找操作后观察两个流的 Position 属性。您将看到操作和基本流位置值之间的差异。

在子流完成工作后,我通过在基本流上调用自己来解决这个问题。

于 2011-09-12T11:21:28.723 回答
0

很难说,但我很确定如果一天工作而另一天工作,则文件不可能被更改。

关于 Seek 方法,它允许您搜索超出流长度的任何位置。

来自 MSDN:

您可以寻找到流长度之外的任何位置。当您搜索超出文件长度时,文件大小会增加。

http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx

于 2011-09-12T09:47:57.970 回答