寻求C#的奇怪行为

时间:2009-11-23 06:27:45

标签: c# seek

我在使用流方面遇到了一些困难。我正在使用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);

谢谢,

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

很难说,但我很确定如果有一天工作而另一天工作,那么文件就不会被更改。

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

来自MSDN:

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

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