Я пытаюсь создать выходные файлы, подписанные динамическим индексом (d = {0, ..., NUM_DEMES-1}). В настоящее время я получаю только выходные файлы для первого значения (d = 0).
#include <sstream>
#include <string>
void Simulation::updateSimulation( double t )
{
...
ofstream abundanceStream;
ofstream abHeaderStream;
if ( step == 1 ) {
for ( int d = 0; d < NUM_DEMES; d++ ) {
abundanceStream.open( makeFilename( "Abundances_", d ).c_str(),ios::out);
abHeaderStream.open( makeFilename( "Abundances_IDs_", d ).c_str(),ios::out);
}
}
for ( int d = 0; d < NUM_DEMES; d++ ) {
abundanceStream.open( makeFilename( "Abundances_", d ).c_str(),ios::app);
abHeaderStream.open( makeFilename( "Abundances_IDs_", d ).c_str(),ios::app);
}
}
string Simulation::makeFilename( const string& basename, int index )
{
ostringstream result;
result << basename << index;
return result.str();
}
Это создает Abundances_0 и Abundances_IDs_0, но больше ничего. Я могу написать в эти файлы. Я могу просто создать другие имена файлов, но файлы просто не появляются.
Я, вероятно, упускаю что-то базовое о потоках, но я не смог понять, что именно.
EDIT
Следующий код печатается для отображения правильных имен файлов:
for ( int d = 0; d < NUM_DEMES; d++ ) {
abundanceStream.open( makeFilename( "Abundances_", d ).c_str(),ios::app);
abundanceStream << "stuff\n";
cout << makeFilename( "Abundances_", d ).c_str() << endl;
abHeaderStream.open( makeFilename( "Abundances_IDs_", d ).c_str(),ios::app);
abHeaderStream << "more stuff\n";
cout << makeFilename( "Abundances_IDs_", d ).c_str() << endl;
}
Но «вещи» и «больше вещей» появляются только в Abundances_0 и Abundances_IDs_0.