8

私はC++に比較的慣れていないので、ifstreamにいくつか問題があります。私がやりたいのはファイルをバイトごとに読み取ることだけですが、読み取りは常にファイルの途中で失敗します。私のコード:

void read(ifstream&f)
{
    unsigned char b;
    for (int i=0;;++i)
    {
        if(!f.good())
        {
            cout<<endl<<"error at: "<<i;
            return;
        }
        f>>b; // b=f.get(); and f.read(&b, 1); doesnt work either
        cout<<b;
        /* ... */
    }
}

最初の数百バイトを正しく読み取り、残りのファイルはスキップされます。バッファリングについて何か問題がありますか?私は何を間違えましたか?

編集:

原因となる可能性のあるものを見つけました。ファイルではCRLF行末(2バイト)を使用していますが、上記のすべてのメソッドはLFのみを返すため、各行の終わりでiは1つだけ増加しますが、ファイル内の2バイト。だから私の質問は:どうすればCRとLFの両方を別々に取得できますか?

4

2 に答える 2

19

試す

f.read(&b, 1);

<<とは両方ともテキストget()を対象としており、バイナリデータを対象としていません。

于 2012-06-22T19:11:45.013 に答える
1

ファイルをバイナリモードで開くことで、ようやく機能するようになりました(注意を向けてくれたAlexに感謝します)。

CR キャラクターが ifstream と cout の両方を台無しにしているようで、それが私の混乱を引き起こしたようです。これを心に留めておきます。

于 2012-06-22T19:54:30.423 に答える