我正在将文件保存在USB驱动器上,并且需要确保它已完全写入以避免在未正确移除USB驱动器时损坏。 好吧,我做了一些研究,似乎可以通过调用FlushFileBuffers Win32函数来实现。 但问题是,我正在使用boost :: serialization进行保存,因此无法访问实际文件HANDLE。 我想知道刷新文件的正确方法是什么?谢谢!
答案 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设备。刷新数据只是确保它从用户区进入内核,但内核也可以自己进行缓冲。