我試圖創建由動態索引(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但沒有別的。我可以寫入這些文件。我可以創建其他文件名就好了,但文件不會顯示。
我可能錯過了關於流的基本信息,但我一直無法弄清楚什麼。
編輯
下面的代碼打印到屏幕右邊的文件名:
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設置爲什麼? – 2009-11-12 19:43:54
NUM_DEMES的價值是什麼? – 2009-11-12 19:44:21
對不起。 NUM_DEMES = 2,並且d正在遞增。 Result.str()也檢出(即,cout << result.str()打印它應該的內容,並且打印makeFilename(...)的結果也給出正確的文件名)。 – Sarah 2009-11-12 19:48:39