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