0

他の誰かのコードをデバッグしているときに、C++ のfstreamオブジェクトとストリーム演算子を介した入力の間の相互作用に遭遇しましたが、ios::appこれは以前は認識していませんでした。

file.txtテキストデータが存在し、含まれていると仮定します。fstream元のコンテキストでは、 は長寿命で、入力と出力の両方に使用されていました。次のコードは期待どおりに機能しません (ファイルからの出力を提供しません)。エラー処理コードは省略されています。

#include <string>
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    fstream f("file.txt", ios::app);
    string in;
    f >> in;
    cout << in << endl;
    f.close();
    return 0;
}

ファイルを開くステートメントを次のように変更すると、問題が解決します。

fstream f("file.txt");

これは予想される動作ですか?ios::app でオブジェクトを開きfstream、ストリーム オペレータを介した入力が正しく動作することを期待することはできないのでしょうか?

64 ビット Linux では g++ 4.6.3、32 ビット Windows 7 では mingw-g++ 4.4.1 でコンパイル

4

1 に答える 1

3

std::fstreamコンストラクターを確認すると、デフォルトの引数がフラグのビットフィールドであることがわかりios_base::inますios_base::out。フラグとしてのみios_base::app指定することで、ファイルを追加専用にします。入力と追加の両方が必要な場合は、eg を使用する必要がありますios::in | ios::app

于 2012-09-20T14:01:03.760 に答える