我想在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大小文件!!
答案 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 ;;