我有一个Win32程序,可以打开文件并在几个小时内将数据写入其中。我希望每隔一段时间更新文件大小(如资源管理器窗口中所示)。
例如,当浏览器下载大文件时,即使文件仍在下载,您也可以看到文件大小随时间的变化。
使用我当前的天真实现,文件大小保持为零,直到我关闭文件。
如何在Win32中执行此操作?目前,该文件已使用std::ofstream
打开。这是std::ostream::flush()
的正确应用吗?或者我是否需要定期关闭并重新打开文件?
答案 0 :(得分:1)
std::ostream::flush()
确保您的数据在磁盘上安全无虞。在自动冲洗得足够好的情况下刷新缓冲区是一个有效的用例(例如,在太长时间内写入的数据太少,数据不断写入但需要不断访问同样,您需要确保在发生崩溃或断电等情况下记录数据。);但是,在某些OS /文件系统组合(请参阅Why is the file size reported incorrectly for files that are still being written to?)上,仍然无法相应地更新文件大小。在Win32上,在实际关闭/重新打开句柄之前,您通常不会看到大小更新;有时重读dir等会有所帮助,有时它只是赢了。
因此,您可以使用例如ReOpenFile强制进行更新,或者只使用close / open而不是刷新。确切的解决方案取决于您是否需要更新的文件大小,并且降低的输出率不是真正的问题(在这种情况下,重新打开是最佳选择),或者如果您可以使用错误的大小报告(在这种情况下,冲洗是IMO的最佳选择)。