J'enregistre un fichier sur une clé USB et je dois m'assurer qu'il est complètement écrit pour éviter toute corruption au cas où le lecteur USB ne serait pas retiré correctement. Eh bien, j'ai fait quelques recherches et il semble que cela soit possible en appelant la fonction FlushFileBuffers Win32. Mais le problème est que j'économise en utilisant boost :: serialization et que je n'ai donc pas accès au fichier réel HANDLE. Je me demande quelle est la bonne façon de vider le fichier? Merci!Comment vider les tampons de fichiers lors de l'utilisation de boost :: serialization?
0
A
Répondre
2
Appel ostream :: flush sur le flux de sortie que vous avez créé votre objet archive avec:
// create and open a character archive for output
std::ofstream ofs("filename");
boost::archive::text_oarchive oa(ofs);
...
ofs.flush();
Vous pouvez aussi tout simplement laisser les objets hors de portée qui devrait tout rincer:
{
// 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
}
Notez que vous devez toujours démonter correctement votre périphérique USB. Le vidage des données permet simplement de s'assurer que le noyau passe directement de l'utilisateur au noyau, mais le noyau peut aussi faire sa propre mise en mémoire tampon.
Questions connexes
- 1. Comment forcer UIImageWriteToSavedPhotosAlbum à synchroniser (vider) les tampons?
- 2. Comment fonctionne boost :: serialization Archive :: register_type?
- 3. Boost Serialization - Sérialiser std :: tr1 :: shared_ptr?
- 4. Vider un boost :: iostreams :: zlib_compressor. Comment obtenir une "synchro flush"?
- 5. Comment utiliser les tampons de protocole?
- 6. Est-il possible d'utiliser boost :: serialization avec la classe managée?
- 7. Erreur de compilation lors de l'utilisation de la librairie de sérialisation boost
- 8. Boost timbre de sérialisation?
- 9. exception Boost lors de l'exécution
- 10. Comment vider des fichiers en lot
- 11. Comment effacer les tampons de sortie lorsque le programme forge?
- 12. Problème de compilation de la sérialisation Boost
- 13. Emacs: rouvre les tampons de la dernière session au démarrage?
- 14. Les onglets de tampon XEmacs n'affichent pas tous les tampons
- 15. Génération d'une définition de tampons de protocole
- 16. Aller intégration avec les tampons de protocole?
- 17. comment vider les en-têtes de réponse dans ASP.Net
- 18. Écran GNU: fichiers vers des tampons numérotés?
- 19. EmacsW32 renomme les tampons avec les anciens noms de fichiers raccourcis Windows
- 20. protobuf-net enum serialization
- 21. Linux -> C++ code: Object Serialization
- 22. boost :: sérialisation de boost :: unordered_map
- 23. JTemplates serialization
- 24. Vider les pools de connexions JDBC
- 25. erreur de liens Boost
- 26. est tampons de profondeur obligatoire
- 27. Constructeur de copie non appelé lors de l'utilisation de boost :: bind, boost :: shared_ptr et boost :: thread ensemble
- 28. DTrace: comment imprimer les tampons mémoire
- 29. Comment puis-je demander à Emacs de restaurer tous les tampons inchangés lors du changement de branche dans git?
- 30. Python: comment vider les cookies d'une instance de mechanize.Browser?
Merci pour la réponse! Est-il possible de garantir la sauvegarde des fichiers même si le lecteur n'est pas correctement monté, par exemple en désactivant temporairement la mise en cache des écritures sur le volume? –
@Alex - malheureusement, je ne sais pas comment le faire dans Windows (ou même si c'est possible). Je recommande de poser cette question comme nouvelle. –
@Alex: Non. C'est un problème FAT fondamentalement. Vous avez besoin d'un système de fichiers transactionnel pour cela, comme Ext3/exFAT. Vous pouvez bien sûr améliorer les chances. Par exemple. appelez 'FlushFileBuffers' sur le handle de volume et appelez la fonction' CreateFile' avec le 'FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH' drapeaux. – MSalters