追加到文本文件在循环中无法正常工作

Append to text file is not working correctly in a loop

本文关键字:常工作 工作 文本 文件 循环 追加      更新时间:2023-10-16

以下代码是在运行时多次调用的函数。该函数包含一个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();
}

您的fileOutput.close()被注释掉了,关闭文件可能会修复。

尝试执行以下命令:

int main() {
        std::ofstream f("f.txt");
        f << "this will be theren";
        std::ofstream g("f.txt");
        g << "this will notn";
}

第一个字符串将写入文件,但不会写入第二个字符串。

我建议您将std::ofstream fileOutput("testlog.txt", std::ios_base::app | std::ios_base::out)移到函数之外,然后在调用它时fileOutput作为参数传递。

完成后,请记住关闭文件。

实际上,您不需要使用 std::ofstream 对象指定 std::ios::out 标志,因为它已经默认设置了。 如果您希望能够附加到文件的末尾,您真正需要做的就是设置 std::ios::app 标志。

std::ofstream fileOutput("testlog.txt", std::ios::app);

另外,虽然我认为这不是您的问题,但换行符不会刷新您的字符串流缓冲区并强制它写入文件。我建议用std::endl替换您的"n",以确保刷新缓冲区。