reader.BaseStream.Seek(position, SeekOrigin.Begin);
看起来没什么问题,但是在实际使用中,只使用这段代码,会导致文件内容读取混乱!
必须使用StreamReader.DiscardBufferedData!!!
原因:
通过调用DiscardBufferedData示例读取数据之后,可按预期方式工作。 读取前 15 个字符后,位置重置为 2 的偏移量值,则读取所有剩余的字符。 如果您删除对调用DiscardBufferedData,该示例未按预期运行。 读取前 15 个字符,但仅基础流的当前位置重置。 内部缓冲区的StreamReader对象仍位于第 16 个字符。 因此,ReadToEnd缓冲区以及从重置位置开始的基础流中的字符返回的所有字符。
注:
使用DiscardBufferedData方法来重置的内部缓冲区StreamReader对象。 您需要调用此方法时,才内部缓冲区的位置和BaseStream不匹配。 当数据读取到缓冲区,然后寻求基础流中的新位置时,这些位置可以是不匹配。 此方法会降低性能,仅当绝对必要,例如当你想要读取的内容的一部分时才应使用StreamReader对象超过一次。
出处: