ofstreamをパラメータとする関数main.cppと関数自体を複数回呼び出す必要があるクラスのプログラムを作成しています.txtファイルの最後に新しいデータを追加する必要があります(この例では、単純化のためにint型のデータを作成しています)。C++:ストリーム&関数を.txtファイルに続けて追加する
何が起こっているのは、関数がmainで何回も呼び出されると、ファイルの最後に新しいデータを追加するのではなく、すべてを上書きするということです。私は自分のプログラムの仕事の中で他のすべてを知っていますので、私はちょうどそれがTLではないように、できるだけ裸の骨に取り除くつもりです; DR。私は含まれている
#include<fstream>
using namespace std;
私のすべてのファイルに含まれています。
ここでの要点です:main.cppに中
:aClass.hで
aClass* someClass = new aClass;
int data = 0;
...
ofstream myfile ("file.txt");
someClass->appendData(myfile, data);
...
:aClass.cppで
void appendData(ofstream& myfile, int data);
:
void aClass::appendData(ofstream& myfile, int data){
if(myfile.is_open()){
myfile << data << "\n";
myfile.close();
}
else cout << "Couldn't open file";
}
誰かが私にこれを助けることができたら、私は感謝しますそれ。何らかの理由で、彼らは私たちに1年以上でfstreamsに触れさせていないし、私は問題が何であるか分からない。 appendData
で
なぜ 'appendData'で' myfile.close() 'を呼びますか? –
@RSahu私は私がそうしてはならないとは知らなかった。代わりにメイン出口の前でそれを行う必要がありますか?私はそれがスタックフレームの間に開いたままにしても大丈夫だとは知らなかった。 – BabaSvoloch
'appendData'からそれを削除する。 'myfile.close()'を 'main'と呼ぶことはオプションです。デストラクタは 'close()'を呼び出します。しかし、オブジェクトに 'close()'を呼び出すと、オブジェクトにそれ以上書き込みを行わないと確信できれば害はありません。 –