1

ストリームに問題があります。FileStream と BinaryReader を使用していますが、奇妙な動作が発生しました。まず第一に(これは別の質問でした。StreamReaderを使用すると、Peekを実行するとpsoitionが変更されたという奇妙な動作が発生したため、BinaryReaderを使用しましたが、問題ありませんでした)今、Seekを実行すると(を使用してもちろん、基礎となるベース ストリーム - FileStream) 正常に動作する (正しい位置に到達する) 場合もありますが、ファイルの長さをはるかに超えた位置にジャンプすることもあります。 1233*267 の位置にたどり着きましたが、1 日後には問題なく、問題は別の場所にありました。

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 が別のストリームから構築される場合、位置は最初は同じです。ただし、2 番目のストリームがシークする場合、そのベース ストリームの位置は同期されません。

読み取り操作とシーク操作の後に、両方のストリームの Position プロパティを監視してみてください。操作とベース ストリームの位置の値の間に不一致が見られます。

サブストリームによって行われた作業の後に、ベース ストリームで自分自身を Seek と呼ぶことで、この問題を解決しました。

于 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 に答える