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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Rin

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

#1

投稿記事 by Rin » 9年前

複数の関数から同一のファイルへの書き込みがしたいのですが、調べてもいまいちやり方がわかりません。
以下のようにやっても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();
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 9年前

とりあえず、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;
}
最後に編集したユーザー みけCAT on 2016年7月07日(木) 16:42 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

mikko

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

#3

投稿記事 by mikko » 9年前

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

Rin

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

#4

投稿記事 by Rin » 9年前

無事解決しました。
お二人ともありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る