覆盖每个std::ofstream调用的文件内容

Overwritting the content of file on each std::ofstream call

本文关键字:文件 调用 ofstream std 覆盖      更新时间:2023-10-16

以下代码

#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时覆盖输出文件的内容。

这样做的原因是,我想在间隔中调用更新函数。因此,每次调用update函数时,新的统计数据应该出现在输出文件中(而不是将当前统计数据附加到前一个统计数据中)。

p。S:把fout.clear()放在两个打印调用之间是行不通的。

只需使用std::ofstream::seekp()重置print()调用之间的输出位置

   std::ofstream fout( "out.txt" );
   print( fout, 1 );
   fout.seekp(0); // <<<<
   print( fout, 2 );

注意fout.clear()只是重置流的错误状态。