【发布时间】:2017-09-25 03:11:45
【问题描述】:
我正在使用 C++ 运行模拟,为了跟踪模拟进度,我将输出写为 std::cout << "\rSimulation progress: " << progress;,根据这个答案 https://stackoverflow.com/a/3057994/4237753。所以对于"\r",我以为我覆盖了前一行,但是当我将输出保存到日志文件时,以前覆盖的行也会被保存,在“覆盖”行的每个实例之前都有一个^M。现在我有大约 100MB 的日志文件,而它们只需要几 KB。
文件外观示例:
^MSimulation progress: 66.500^MSimulation progress: 66.600^MSimulation
progress: 66.700^MSimulation progress: 66.800^MSimulation progress:
66.900^MSimulation progress: 67.000^MSimulation progress: 67.100^MSimulation
progress: 67.200^MSimulation progress: 67.300
我想要的只是最后一个实例
Simulation progress: 67.300
有什么好的方法或标准的方法可以真正去除线条吗?
谢谢!
【问题讨论】:
-
将
\r写入std::cout不会神奇地将之前写入的文本删除到文件中。 C++ 不能以这种方式工作。为此,您必须使用seekp() 重置文件中的输出位置,以便后续写入覆盖现有内容。
标签: c++ c++11 terminal cout cat