複数の関数から同一のファイルへの書き込みがしたいのですが、調べてもいまいちやり方がわかりません。
以下のようにやってもa.txtには「BBB」しか書き込まれませんが、「AAABBB」と書き込むにはどうしたらいいかということです。
言語はc++です。回答お願いします。
複数の関数からの同一ファイルへの書き込み
Re: 複数の関数からの同一ファイルへの書き込み
とりあえず、std::ios::appフラグを用いることで追記はできます。
std::ofstreamのオブジェクトを引数かクラスメンバで渡すなどの方法のほうがいいかもしれません。
また、std::endlをstd::ofstreamに渡すと改行(してフラッシュ)されてしまうので、改行したくない場所で渡してはいけません。
std::ofstreamのオブジェクトを引数かクラスメンバで渡すなどの方法のほうがいいかもしれません。
また、std::endlをstd::ofstreamに渡すと改行(してフラッシュ)されてしまうので、改行したくない場所で渡してはいけません。
#include <fstream>
using std::ofstream;
using std::endl;
namespace test {
int WriteA();
int WriteB();
void main()
{
WriteA();
WriteB();
}
int WriteA()
{
ofstream fout;
fout.open("a.txt");
fout<<"AAA";
fout.close();
}
int WriteB()
{
ofstream fout;
fout.open("a.txt", std::ios::app);
fout<<"BBB"<<endl;
fout.close();
}
}
int main() {
test::main();
return 0;
}
最後に編集したユーザー みけCAT on 2016年7月07日(木) 16:42 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 複数の関数からの同一ファイルへの書き込み
fout.open("a.txt") の結果、出力ファイル a.txt が上書きオープンされて中身は空になります。
追記する場合には fout.open("a.txt", ios::app) などとする必要があります。
(ただしそのように変更しても、endl の出力をやめないと AAABBB とはなりません)
追記する場合には fout.open("a.txt", ios::app) などとする必要があります。
(ただしそのように変更しても、endl の出力をやめないと AAABBB とはなりません)