打开/写入多个文件

时间:2017-03-18 05:00:25

标签: c++ ofstream

我正在尝试编写一些代码,用于将速度和时间值输出到多个文件,特别是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是包含相应对象的速度和时间的文件。我不太确定如何实现这种类型,我打开了多个文件,或者我是否必须继续打开和关闭文件?如果是这种情况,我担心会覆盖文件中的现有数据,除非它知道在再次打开文件时不能从文件的开头开始。

感谢任何帮助,谢谢

1 个答案:

答案 0 :(得分:0)

默认情况下,std :: ofstream会覆盖而不是追加,所以从你打开文件的那一刻起,它就会流式传输字节,覆盖打开之前的所有内容。

* fstream变体保持文件打开,直到流对象被销毁。换句话说,打开的文件与表示它的* fstream对象的生命周期相关联。一旦销毁,文件立即关闭。这个概念称为RAII。在您的情况下,流对象是全局的,因此在main()结束后,在应用程序终止之前销毁。

如果写入文件不是时间关键,那么您的实现就足够了。另一方面,如果您需要更精确的测量,请考虑将每个输出写入中间缓冲区(例如std :: stringstream),然后在完成测量后将这些数据传输到您的文件中。

但是,如果您不需要先前应用程序运行的数据,请不要使用文件,而只需使用std :: stringstream写入内存。