使用boost :: serialization时如何刷新文件缓冲区?

时间:2010-02-05 06:26:58

标签: c++ winapi boost usb-drive boost-serialization

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

1 个答案:

答案 0 :(得分: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设备。刷新数据只是确保它从用户区进入内核,但内核也可以自己进行缓冲。