0

我将文件保存在 USB 驱动器上,需要确保它已完全写入以避免损坏,以防 USB 驱动器未正确移除。好吧,我已经做了一些研究,似乎可以通过调用 FlushFileBuffers Win32 函数来实现。但问题是,我正在使用 boost::serialization 进行保存,因此无法访问实际的文件 HANDLE。我想知道刷新文件的正确方法是什么?谢谢!

4

1 回答 1

3

在您创建存档对象的输出流上调用 ostream::flush:

// create and open a character archive for output
std::ofstream ofs("filename");
boost::archive::text_oarchive oa(ofs);

...

ofs.flush();

您也可以让对象超出应该刷新所有内容的范围:

{
    // create and open a character archive for output
    std::ofstream ofs("filename");
    boost::archive::text_oarchive oa(ofs);

    // going out of scope flushes the data
}

请注意,您仍然需要正确卸载 USB 设备。刷新数据只是确保它从用户空间进入内核,但内核也可以做它自己的缓冲。

于 2010-02-05T06:53:55.460 回答