以下代码是在运行时被多次调用的函数。该函数包含for loop
,其中一些文本被写入stringstream
缓冲区。问题是只有来自第一个(或最后一个?)函数调用的数据被输入到文本文件中。我很难找到一种方法让数据附加到文本文件而不会被覆盖,只是以“一个接一个”的方式。
void testItems(const TestObjectList* const testObject) {
std::stringstream objectOutputBuffer;
std::ofstream fileOutput("testlog.txt", std::ios_base::app | std::ios_base::out);
for (itr = testobjects.begin(); itr != testobjects.end(); itr++){
objectOutputBuffer << some stuff getting written to the buffer in the loop << std::endl;
}
fileOutput << objectOutputBuffer.str() << "\n";
//fileOutput.close();
}
答案 0 :(得分:2)
您的fileOutput.close()
已被注释掉,关闭该文件可能会解决。
尝试执行此操作:
int main() {
std::ofstream f("f.txt");
f << "this will be there\n";
std::ofstream g("f.txt");
g << "this will not\n";
}
第一个字符串将写入文件但不会写入第二个字符串。
我建议您将std::ofstream fileOutput("testlog.txt", std::ios_base::app | std::ios_base::out)
移到函数外部,然后在调用时将fileOutput
作为参数传递。
当你完成后记得关闭文件。
答案 1 :(得分:1)
您实际上不需要使用std::ios::out
对象指定std::ofstream
标志,因为它已默认设置。如果您希望能够追加到文件的末尾,那么您真正需要做的就是设置std::ios::app
标志。
std::ofstream fileOutput("testlog.txt", std::ios::app);
虽然我不认为这是你的问题,但换行字符不会刷新你的字符串流缓冲区并强制它写入文件。我建议将"\n"
替换为std::endl
,这样可以确保刷新缓冲区。