gpt4 book ai didi

c++ - 打开/写入多个文件

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:53 25 4
gpt4 key购买 nike

我正在尝试编写一些代码,将速度和时间值输出到多个文件,特别是 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 写入内存即可。

关于c++ - 打开/写入多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42870665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com