- ベストアンサー
ファイル出力"fout"でデータを足して保存するには…
独学数日目でまだまだ未熟なものですがファイルの出力について、 以下のようなプログラムを作成した場合に… (ソースの断片・部分) //=== int firstfile() { ofstream fout("sample.txt"); if(!fout){ cout << "展開できませんでした\n"; return 1; } else fout <<"最初の書き出し\n"; fout.close(); return 0; } //=== int endfile() { ofstream fout("sample.txt"); if(!fout){ cout << "ファイルの展開に失敗しました。\n"; return 1; } else fout <<"最後の書き出し"; fout.close() return 0; } //=== firstfile(); endfile; firstfile関数で作成したファイルを、 endfile関数でファイルが上書きされてしまい、 「最後の書き出し」 としか出力されません。 「 最初の書き出し 最後の書き出し 」 と文字列を追加して保存できるようにするにはどうやって組めばいいのでしょうか? 持っている本を読みましたがどこにもそれらしい処理方法は書いてありませんでした。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 上のソース(2番目の関数)を書き換えて上書きできるようにしていただけませんか? 上書きじゃなくて追加にするなら ofstream fout("sample.txt", ios::app); 最初の方が教えてくださったページにも、 std::ofstream ofs( "test.txt", std::ios::out | std::ios::app ); と書いてありますね。 質問者さんの環境だと、デフォルトで「std::」が省略できるようですので、「std::」を無視して下さい。 ちなみに、std::が何を表しているかを学ぶには、C++の「ネームスペース」について調べてみて下さい。
その他の回答 (1)
ファイルストリームを開くときに「追加」で開けくように明示すればいいんじゃないでしょうか? 参考まで…。 http://www.geocities.jp/ky_webid/cpp/library/033.html
お礼
ありがとうございます。「app」が追加保存の鍵になるのでしょうかね。 ただ、「using namespace std;」と最初に記述した際の書き方がいまいちわからずコンパイルエラーが起こってしまいます。 どなたか、上のソース(2番目の関数)を書き換えて上書きできるようにしていただけませんか?
お礼
ありがとうございました。ネームスペースの意味についても初めて知ることができました。