2

ファイルの解析をより堅牢にしようとしています。ifstreamを使用してseekg、ファイル内で有効な位置にいることを確認するにはどうすればよいですか?

これは動作しません:

while(m_File.good() && m_File.peek() != EOF)
{ ...a seekg operation moves file position past end of file... }

現在のイテレータが終了イテレータをはるかに超えてプッシュされていると想定しているため、peek()が真になることはありません。

4

2 に答える 2

2

いいえ、これを行う方法はありません。ファイルの終わりのオフセットを見つけて、それを超えてシークしないようにする必要があります。これにより、未定義の動作が発生します。もちろん、書き込みによってファイルのサイズを増やすことができます。

于 2009-12-20T22:01:07.320 に答える
1

悪い位置に到達したときにエラーが発生した場合(たとえば、発生してはならない)、ストリーム例外マスクを設定して、whileループの外側で適切な例外をキャッチしようとする場合があります。その場合、それは「最もクリーンな」ソリューションになります。

于 2009-12-20T22:05:17.890 に答える