使用ofstream迭代访问和写入多个文件

时间:2018-04-18 07:30:52

标签: c++ file loops

我有一对头文件。在IsingModel.h中,我公开声明:

ofstream logfile1;
ofstream logfile2;

然后打开相关文件(logfile1和logfile 2有不同的名称)我用:

do {
        name2.str(""); //reset name stringstream
        n++; //increase n value
        name2 << "output_" << gridSize << "_" << seed << "_" << n << "_eqmCalc.txt"; //stream created

    } while (if_exist(name2.str())); //test if file already exists
    logfile2.open(name2.str());

适用于创建文件。然后,在整个代码中,我使用ofstreams来处理文件,例如:

logfile1 << counter << " " << calcM() << " " << calcE() << endl;

这适用于对每个文件独立的操作,但是当我调用析构函数时,我想为每个文件写入相同的标准信息。为此,我正在尝试迭代地写入文件,它似乎不起作用:

void IsingSystem::test() {
for (int i = 1; i = 2; i++) {
    if (ofstream("logfile" + to_string(i)).is_open); {
        ofstream("logfile" + to_string(i)) << "success" << endl;
        }
    }
}

而是创建名为logfile1和logfile2的文件。作为替代方案,我尝试创建一系列ofstreams:

void createFileHandles() {
    const int count = 2;         
    std::ofstream logfile[count];     
}

但是,我无法弄清楚如何在函数之间正确传递它。

处理流的正确方法是什么,以便我可以打开多个文件,同时向它们写入不同的指令,但也会发生一些操作?

1 个答案:

答案 0 :(得分:0)

您可以使用ofstream

的向量
vector<ofstream> ofstreams(2);
//fill vec
for (int i = 0; i < 2; i++)
{
    if (ofstreams[i].is_open);
    {
        ofstreams[i]<< "success" << endl;
    }
}

然后,您可以将ofstreams传递给函数。