Как очистить файловые буферы при использовании boost :: serialization? - PullRequest
0 голосов
/ 05 февраля 2010

Я сохраняю файл на USB-накопителе и должен убедиться, что он полностью записан, чтобы избежать повреждения в случае неправильного извлечения USB-накопителя. Ну, я провел некоторое исследование, и кажется, что это возможно с помощью функции Win32 FlushFileBuffers. Но проблема в том, что я сохраняю с использованием boost :: serialization и, таким образом, не имею доступа к реальному файлу HANDLE. Интересно, как правильно очистить файл? Спасибо!

1 Ответ

3 голосов
/ 05 февраля 2010

Вызовите 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-устройство. Сброс данных просто гарантирует, что они попадают из ядра пользователя в ядро, но ядро ​​также может выполнять свою собственную буферизацию.

...