在启动时清除文件内容然后追加

时间:2013-02-18 15:45:43

标签: c++ append fstream

我想在std::fstream的文件中添加一些文字。我写了这样的东西

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

这个结构的问题是,每次运行我的程序时,文本都会附加到我之前的运行中。例如,在第一次运行结束时,文件的大小为60KB。在第二次运行开始时,文本附加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大小文件!!

3 个答案:

答案 0 :(得分:3)

你只需要打开一次文件:

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()
    }
};

答案 1 :(得分: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对象时只打开一次,并且在析构函数close()中调用,这也会自动将任何挂起的输出写入物理文件。可选地,在每次将某些内容写入流后,您可以调用flush()以确保输出尽快转到您的文件。

此课程的可能用途:

{
    Writer w("/media/c/tables.txt");
    w.print();
} // w goes out of scope here, output stream is closed automatically

答案 2 :(得分:0)

ofstream out; //输出文件对象

out.open(fname1,ios :: out); //打开文件

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

///////////// 代码来写文件

E.g。出&LT;&LT;&#34;你好&#34 ;;