繁体   English   中英

打开/写入多个文件

[英]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写入内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM