Я пытаюсь создать выходные файлы, индексированные динамическим индексом (d = {0, ..., NUM_DEMES-1}). В настоящее время я получаю только выходные файлы для первого значения (d = 0).Динамические имена выходных файлов (C++)
#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.
Каково значение result.str() для каждого вызова? и что установлено в NUM_DEMES? –
Каково значение NUM_DEMES? –
Извините. NUM_DEMES = 2, а d - правильно. Result.str() также отлично проверяет (т. Е. Cout << result.str() печатает то, что ему нужно, и печать результатов makeFilename (...) также дает правильные имена файлов). – Sarah