C ++ - 在关闭程序之前,ofstream不会输出到文件

时间:2012-03-09 21:09:38

标签: c++ visual-c++ c++-cli fstream ofstream

我有以下代码:

   ofstream mOutFile.open(logPath, ios_base::app);
   string lBuilder;

   lBuilder.append("========================================================\n");
   lBuilder.append("Date: ");
   lBuilder.append(asctime(timeinfo));
   lBuilder.append("\n");
   lBuilder.append("Log Message:\n");
   lBuilder.append(toLog);
   lBuilder.append("\n");
   lBuilder.append("========================================================\n\n");

   int lSize = lBuilder.size();
   char* lBuffer = new char[lSize];
   int index = 0;
   for each (char c in lBuilder)
      lBuffer[index++] = c;

   mOutFile.write(lBuffer, lSize);
   mOutFile.flush();

不幸的是,在关闭应用程序之前(我假设关闭ofstream也可以),输出不会写入文本文件。我知道我可能关闭并重新打开流,一切都“正常”,但这似乎是一个愚蠢和不正确的解决方案。我在这里做错了什么?

我还根据我在这里找到的其他问题尝试了以下变体,但这些解决方案不起作用:

mOutputFile << flush;
mOutputFile << endl;

提前感谢您提供任何帮助。

编辑此代码中的所有内容都在使用visual c ++,它的构建和工作正常,除非在流关闭之前不写入文件,即使我强制刷新。另外,我从使用&lt;&lt;&lt;运算符char *和.write()以查看是否有任何不同的行为。

2 个答案:

答案 0 :(得分:8)

std::ofstream file(logPath, ios_base::app);

file << "========================================================\n"
     << "Date: " << asctime(timeinfo)
     << "\nLog Message:\n" << toLog
     << "\n========================================================\n\n"
     << std::flush; 
     //if you want to force it write to the file it will also flush when the the file object is destroyed
//file will close itself

这不仅更容易阅读,但它可能也比你的方法更快+它是一个更标准的appraoch

答案 1 :(得分:1)

我最终只是通过在写入操作后关闭并重新打开流来“使其工作”。

mOutputFile << "all of my text" << endl;
mOutputFile.close();
mOutputFile.open(mLogPath);

编辑尝试在其他几个系统上强制刷新后,看起来在我的开发计算机上运行正常。不是好消息,但至少上述解决方案似乎在以编程方式刷新ofstream失败时起作用。我不确定上述代码的含义,所以如果有人想要关闭,如果有关闭和重新打开这样的流的影响。