Opening/Writing 到多个文件

Opening/Writing to multiple files

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

感谢任何帮助,谢谢

默认情况下 std::ofstream 覆盖而不是附加,因此从您打开文件的那一刻起,它将流式传输字节,覆盖打开文件之前的所有内容。

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

如果写入文件对时间要求不高,那么您的实现就足够好了。另一方面,如果您需要更准确的测量,请考虑将每个输出写入一个中间缓冲区,例如 std::stringstream,然后在完成测量后将该数据流式传输到您的文件。

但是,如果您不需要以前运行的应用程序的数据,请不要费心使用文件,而只需使用 std::stringstream.

写入内存即可