代码之家  ›  专栏  ›  技术社区  ›  Alex Jenter

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

  •  0
  • Alex Jenter  · 技术社区  · 15 年前

    我正在USB驱动器上保存一个文件,需要确保该文件已完全写入,以避免在未正确删除USB驱动器时损坏。 我已经做了一些研究,通过调用flushfilebuffers win32函数似乎可以做到这一点。 但问题是,我正在使用boost::serialization进行保存,因此无法访问实际的文件句柄。 我想知道如何正确地刷新文件?谢谢!

    1 回复  |  直到 15 年前
        1
  •  3
  •   R Samuel Klatchko    15 年前

    对创建存档对象的输出流调用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设备。刷新数据只是确保它从用户区进入内核,但是内核也可以自己做缓冲。