Le scénario d'utilisation est industriel (alimentation instable et autres programmes/matériels buggés). Il est nécessaire que le programme revienne inchangé lorsque l'alimentation est coupée (ou en cas de panne de l'écran bleu). OS est Windows 7 avec NTFS. J'utilise boost :: property_tree write json pour enregistrer les paramètres dans un fichier texte lisible par un humain. Il a parfois effacé le "logic.txt" parfois, lorsque le système s'arrête. J'ai lu le fichier source boost et appels write_json ofstream avec ios par défaut :: outofstream (mode ios :: out) efface le fichier existant vide lorsque le système s'arrête
std::basic_ofstream<typename Ptree::key_type::value_type> stream(filename.c_str());
Le problème doit être ofstream effacer le fichier existant et laisse fichier vide en cas d'échec du système.
Est-ce un problème connu avec ofstream? Quelle est la solution la plus appropriée à cela? Je peux penser à quelques-unes:
fichier Ecrire à « logic_tmp.txt » Tout d'abord, lorsque vous avez terminé, supprimer « logic.txt » et renommer le fichier temporaire à logic.txt.
Utilisation de SQLite au lieu d'écrire directement dans un fichier. (MySQL a cassé une fois, table nécessaire pour être « réparé » quand redémarrera, SQLite ne m'a pas encore échoué)
toute suggestion serait utile.
«Mange mes données: comment tout le monde obtient des erreurs de fichier», voir https://www.flamingspork.com/talks/ (vid mis en cache ici: http://downloads.sehe.nl/zfs-fuse/File_IO_Safety .ogg) – sehe
@sehe Discussion intéressante, je suppose que SQLite multiple (éviter les fichiers volumineux et minimiser la course) avec 'force flush' pourrait être utile. – Guangyu