C++ 两个循环中有多个文本文件

C++ 两个循环中有多个文本文件,c++,C++,我想在两个循环内创建一些文件,并填写它们,而不关闭第一个和第二个循环内的文件 在这里,通过查看代码的这一部分,您可以找到我对这个问题的意思,但它不起作用。。。当然,它会创建100个文件,但问题是每个文件只保存第一个循环的最后一个迭代,而我希望每个文件都编写第一个循环的整个迭代 ofstream fout; for(int t = 0; t < N; t++){ for(int e = 0; e < 100; e++){ fout.open("myfile_"+

我想在两个循环内创建一些文件,并填写它们,而不关闭第一个和第二个循环内的文件

在这里,通过查看代码的这一部分,您可以找到我对这个问题的意思,但它不起作用。。。当然,它会创建100个文件,但问题是每个文件只保存第一个循环的最后一个迭代,而我希望每个文件都编写第一个循环的整个迭代

ofstream fout;
for(int t = 0; t < N; t++){
    for(int e = 0; e < 100; e++){
        fout.open("myfile_"+strcpp(e)+".txt");
        fout << t << psi[e] << endl;
    }
}
fout.close();
每次你打电话:

fout.open(...);
打开文件之前,文件的全部内容都将被删除。由于您多次打开每个文件,因此在写入下一行之前,您会不断删除写入的任何内容。这就是为什么外部for循环的最后一次写入是每个文件中唯一的内容。 我们可以通过指定要附加到要打开的文件来修复此问题。std::ofstream::open接受第二个可选参数,该参数指定模式。您可以将模式设置为将您在文件中写入的内容附加到已有内容的末尾,而不是删除原始文件内容。 例:


尽管更好的解决方案可能是在内部和外部for循环中切换。然后在内部for循环开始之前打开每个文件,对该文件执行所有写入操作,然后关闭该文件并转到下一个文件。这样,您不必多次打开每个文件。

然后将fout.open放在第二个循环之外。@Michael Chourdakis它已经在第二个循环之外了!!一个问题是,在知道e的值之前,无法创建文件名。您可能希望将语句替换为“e优先”。@thomas matthews这可能是一个解决方案,但问题是它需要时间,假设N=100000,外循环的每次迭代需要$1min$。
fout.open(...);
fout.open(my_file_name, ios::app);