我在使用流方面遇到了一些困难。我正在使用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);
谢谢,
答案 0 :(得分:1)
我注意到每个Stream都保持着自己的位置。当Stream从另一个流构建时,该位置最初是相同的;但如果第二个流寻找,它不会同步其基本流位置。
尝试在读取和查找操作后观察两个流的位置属性。您将看到操作与基本流位置值之间的差异。
我通过调用自己在子流完成工作后查找基本流来解决这个问题。
答案 1 :(得分:0)
很难说,但我很确定如果有一天工作而另一天工作,那么文件就不会被更改。
关于Seek方法,它允许您寻找超出流长度的任何位置。
来自MSDN:
您可以搜索超出流的长度的任何位置。当您寻找超出文件长度的文件时,文件大小会增加。
http://msdn.microsoft.com/en-us/library/system.io.filestream.seek.aspx