下面的代码
#include <fstream>
void print( std::ofstream &f, int a ) {
f << a << '\n';
}
int main () {
std::ofstream fout( "out.txt" );
print( fout, 1 );
print( fout, 2 );
return 0;
}
产生这样的输出
1
2
但是我只想看到 2。换句话说,我想在每次调用 print 时覆盖输出文件的内容。
这样做的原因是我想每隔一段时间调用一个更新函数。因此,每次调用更新函数时,新的统计数据都应该出现在输出文件中(而不是将当前的数据附加到之前的数据中)。
P.S:在两个打印调用之间放置 fout.clear()
不会完成这项工作。
最佳答案
只需使用 std::ofstream::seekp()
重置 print()
调用之间的输出位置
std::ofstream fout( "out.txt" );
print( fout, 1 );
fout.seekp(0); // <<<<
print( fout, 2 );
请注意,fout.clear()
只是重置流的错误状态。
关于c++ - 在每次 std::ofstream 调用时覆盖文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383815/