0

我想在文件中附加一些文本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!

4

3 回答 3

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()
    }
};
于 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请注意,在构造对象和调用析构函数时,文件流仅打开一次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

流出;// 输出文件对象

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

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

//////////// 写入文件的代码

例如 out<<"你好";

于 2018-04-21T05:17:06.863 回答