ページ 11

複数の関数からの同一ファイルへの書き込み

Posted: 2016年7月07日(木) 16:24
by Rin
複数の関数から同一のファイルへの書き込みがしたいのですが、調べてもいまいちやり方がわかりません。
以下のようにやってもa.txtには「BBB」しか書き込まれませんが、「AAABBB」と書き込むにはどうしたらいいかということです。
言語はc++です。回答お願いします。

コード:

void main()
{
 WriteA();
 WriteB();
}

int WriteA()
{
 ofstream fout;
 fout.open("a.txt");
 fout<<"AAA"<<endl;
 fout.close();
}
int WriteB()
{
 ofstream fout;
 fout.open("a.txt");
 fout<<"BBB"<<endl;
 fout.close();
}

Re: 複数の関数からの同一ファイルへの書き込み

Posted: 2016年7月07日(木) 16:41
by みけCAT
とりあえず、std::ios::appフラグを用いることで追記はできます。
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;
}

Re: 複数の関数からの同一ファイルへの書き込み

Posted: 2016年7月07日(木) 16:42
by mikko
fout.open("a.txt") の結果、出力ファイル a.txt が上書きオープンされて中身は空になります。
追記する場合には fout.open("a.txt", ios::app) などとする必要があります。
(ただしそのように変更しても、endl の出力をやめないと AAABBB とはなりません)

Re: 複数の関数からの同一ファイルへの書き込み

Posted: 2016年7月08日(金) 18:21
by Rin
無事解決しました。
お二人ともありがとうございました。