我正在尝试编写一些代码,用于将速度和时间值输出到多个文件,特别是4个不同的文件,代表4个不同的对象移动。
我知道要打开并写入1个文件,我可以执行以下操作:
#include <iostream>
#include <fstream>
std::ofstream outfile ("test.txt");
outfile << "my text here!" << std::endl;
outfile.close();
但是我需要对其进行调整,使其在switch语句中起作用如下:
for (int i = 0; i < numRobots; i++){
switch (i){
case 0:
if (r1_stop == 1) r1Speed = 0;
else //Update speed
r1File << r1Speed << " " << time << endl;
case 1:
if (r2_stop == 1) r2Speed = 0;
else //Update speed
r2File << r2Speed << " " << time << endl;
case 2:
if (r3_stop == 1) r3Speed = 0;
else //Update speed
r3File << r3Speed << " " << time << endl;
case 3:
if (r4_stop == 1) r4Speed = 0;
else //Update speed
r4File << r4Speed << " " << time << endl;
}
}
其中r1File,r2File,r3File和r4File是包含相应对象的速度和时间的文件。我不太确定如何实现这种类型,我打开了多个文件,或者我是否必须继续打开和关闭文件?如果是这种情况,我担心会覆盖文件中的现有数据,除非它知道在再次打开文件时不能从文件的开头开始。
感谢任何帮助,谢谢
答案 0 :(得分:0)
默认情况下,std :: ofstream会覆盖而不是追加,所以从你打开文件的那一刻起,它就会流式传输字节,覆盖打开之前的所有内容。
* fstream变体保持文件打开,直到流对象被销毁。换句话说,打开的文件与表示它的* fstream对象的生命周期相关联。一旦销毁,文件立即关闭。这个概念称为RAII。在您的情况下,流对象是全局的,因此在main()结束后,在应用程序终止之前销毁。
如果写入文件不是时间关键,那么您的实现就足够了。另一方面,如果您需要更精确的测量,请考虑将每个输出写入中间缓冲区(例如std :: stringstream),然后在完成测量后将这些数据传输到您的文件中。
但是,如果您不需要先前应用程序运行的数据,请不要使用文件,而只需使用std :: stringstream写入内存。