0

fstream を使用してファイルを読み込もうとしています。次に、最後に到達したら、ファイルを追加してスタッフファイルを書き込みます

abc

サンプルコードを書きました

#include<iostream>
#include<fstream>
#include<queue>

using namespace std;
int main(int argc, char **argv){
    fstream *binf;
    binf=new fstream("t.txt", ios::out|ios::in|ios::app);
    cout<<"EOF"<<EOF<<endl;
    while(true){
        cout<<"before peek"<<endl;
        cout<<"binf->tellg:"<<binf->tellg()<<endl;
        cout<<"binf->tellp:"<<binf->tellp()<<endl;
        cout<<"binf->peek()::int=("<<(int)binf->peek()<<")::char=("<<(char)binf->peek()<<")"<<endl;
        cout<<"after peek"<<endl;
        cout<<"binf->tellg:"<<binf->tellg()<<endl;
        cout<<"binf->tellp:"<<binf->tellp()<<endl;
        char c;
        if(binf->peek()==EOF){
            cout<<"file is not good"<<endl;
            break;
        }
        binf->get(c);
    }
    cout<<"binf->tellg:"<<binf->tellg()<<endl;
    cout<<"binf->tellp:"<<binf->tellp()<<endl;
    binf->seekg(3);
    binf->seekp(3);
    cout<<"binf->tellg:"<<binf->tellg()<<endl;
    cout<<"binf->tellp:"<<binf->tellp()<<endl;
    binf->put('H');
    cout<<"binf->tellg:"<<binf->tellg()<<endl;
    cout<<"binf->tellp:"<<binf->tellp()<<endl;
    binf->seekg(4);
    char c;
    binf->get(c);
    cout<<"c:"<<c<<endl;
    binf->clear();
    binf->close();
    delete binf;
    return 0;
}

これは、このコードを実行して得られる出力です

EOF-1
before peek
binf->tellg:0
binf->tellp:0
binf->peek()::int=(97)::char=(a)
after peek
binf->tellg:0
binf->tellp:0
before peek
binf->tellg:1
binf->tellp:1
binf->peek()::int=(98)::char=(b)
after peek
binf->tellg:1
binf->tellp:1
before peek
binf->tellg:2
binf->tellp:2
binf->peek()::int=(99)::char=(c)
after peek
binf->tellg:2
binf->tellp:2
before peek
binf->tellg:3
binf->tellp:3
binf->peek()::int=(10)::char=(
)
after peek
binf->tellg:3
binf->tellp:3
before peek
binf->tellg:4
binf->tellp:4
binf->peek()::int=(-1)::char=(ÿ)
after peek
binf->tellg:-1
binf->tellp:-1
file is not good
binf->tellg:-1
binf->tellp:-1
binf->tellg:-1
binf->tellp:-1
binf->tellg:-1
binf->tellp:-1
c:

私がやろうとしているのは、ファイルを修正して最後に書き込むことだけですが、ファイルの最後にEOFが表示されるたびに、peek()を使用してもファイルを使用できなくなります

4

1 に答える 1

2

ファイルの終わりに達するとfstreamエラー状態になります。エラー状態の場合、エラー状態をクリアするまで何も機能しません。だからあなたはこれが必要です

   if(binf->peek()==EOF){
        cout<<"file is not good"<<endl;
        binf->clear(); // clear the error state
        break;
   }

fstream閉じる直前にをクリアする必要はありません。何もしません。

ところで、優れたデバッグ手法ですが、適切なデバッガーの使用法を学べば、これがより簡単になります。

于 2012-10-28T05:33:52.633 に答える