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