VS 2005では、次のようなコードがあります。
ifs.open("foo");
while (!ifs.eof())
{
ifs.read(&bar,sizeof(bar));
loc = ifs.tellg();
loc += bar.dwHeaderSize;
// four byte boundary padding
if ((loc % 4) != 0)
loc += 4 - (loc % 4);
ifs.seekg(loc,ios::beg);
}
ifs.close();
コードはVS2005では正常に機能しましたが、VS2008Expressでは失敗します。私の知る限り、VS 2008は、コードがファイルの最後をシークした後、eof()を返していません。私は何かが足りないのですか?シークの場所がファイルサイズを超えているかどうかを確認する明示的なチェックを追加して修正しましたが、ifstreamを正しく理解していることを確認したいと思います。