::getline()でfailbitが多発

解決


ahoogarasu  2007-12-04 02:08:25  No: 67086

getline()を用いてテキストファイルを読み込む単純なプログラムで、
読み込みの途中に頻繁にエラーが発生して、
rdstate()で調べると状態がfailbitなります。
これは頻発するものなのでしょうか?
毎回、発生する(テキストファイルの)行が異なるので、原因の見当がつかなくて困っています。

std::ifstream fp;
fp.open(filename.c_str(), std::ios::in);
std::string line;
while( !fp.eof() ){
  getline( fp, line );
  if( fp.fail() ){
    printf("%d\n", fp.rdstate());
    break;    
  }
}

-------------------------------------------------
テキストファイルの中身
13372 0.0 0.4938
13373 0.0 0.4934
13374 0.0 0.4928
13375 0.0 0.492133333333333
13376 0.0 0.491333333333333
13377 0.0 0.4904
13378 0.0 0.489333333333333
13379 0.0 0.488133333333333
13380 0.0 0.486866666666667


tetrapod  2007-12-04 04:06:00  No: 67087

頻繁に発生する(=発生しないこともある)の?そりゃおかしい。
このソースでは毎回必ず発生するはずだが。
eof に達したときには必ず fail するので。

毎回必ず発生でなく、頻繁に(=発生しないこともある)のであれば原因が違う。


ahoogarasu  2007-12-04 05:23:32  No: 67088

お返事ありがとうございます。

問題はまだ解決していないのですが、
説明がダメだったのと問題箇所の把握ができていませんでした。

正確には、困っているのは同じファイルを読んでいるにもかかわらず、
毎回異なる行数でwhileを抜けてしまうことです。
ファイルの最後eofに来ているようではなさそうです。


ahoogarasu  2007-12-04 10:20:08  No: 67089

CreateThreadとCランタイムライブラリを併用しているのが原因でした。
お騒がせしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加