0

を含むファイルにテキストを追加したいstd::fstream。私はこのようなものを書きました

class foo() {
   foo() {}
   void print() {
      std::fstream fout ("/media/c/tables.txt", std::fstream::app| std::fstream::out);
      // some fout
   }
};

この構造の問題は、プログラムを実行するたびに、テキストが前回の実行に追加されることです。たとえば、最初の実行の最後に、ファイルのサイズは60KBです。2回目の実行の開始時に、テキストに60KBのファイルが追加されます。

これを修正するには、コンストラクターでfstreamを初期化してから、追加モードで開きます。このような

class foo() {
   std::fstream fout;
   foo() {
      fout.open("/media/c/tables.txt", std::fstream::out);
   }
   void print() {
      fout.open("/media/c/tables.txt", std::fstream::app);
      // some fout
   }
};

このコードの問題は、実行中と実行終了時のファイルサイズが0であるということです。

4

3 に答える 3

3

ファイルを開く必要があるのは1回だけです。

class foo() {
    std::fstream fout;
    foo() {
        fout.open("/media/c/tables.txt", std::fstream::out);
    }
    void print() {
      //write whatever you want to the file 
    }
    ~foo(){
        fout.close()
    }
};
于 2013-02-18T15:57:42.790 に答える
0

クラスは次のようになります。

#include <fstream>

class Writer
{
public:
    Writer(const char* filename) { of_.open(filename); }
    ~Writer(){ of_.close(); }
    void print() {
        // writing... of_ << "something"; etc.
        of_.flush();
    }
private:
    std::ofstream of_;
};

Writerファイルストリームは、オブジェクトが構築され、デストラクタが呼び出された時点で1回だけ開かれていることに注意してください。デストラクタclose()は、保留中の出力を物理ファイルに自動的に書き込みます。オプションで、ストリームに何かが書き込まれるたびに、を呼び出しflush()て、出力ができるだけ早くファイルに送られるようにすることができます。

このクラスの可能な使用法:

{
    Writer w("/media/c/tables.txt");
    w.print();
} // w goes out of scope here, output stream is closed automatically
于 2013-02-18T15:59:31.650 に答える
0

ofstream out; //出力ファイルオブジェクト

out.open(fname1、ios :: out); //ファイルを開く

    **out.clear();** // clear previous contents

/////////////ファイルを書き込むためのコード

例:<< "hello";

于 2018-04-21T05:17:06.863 に答える