Quelle est la bonne façon de vérifier une erreur générale lors de l'envoi de données à un fstream?Quelle est la bonne façon de faire une vérification d'erreur 'catch all' sur une opération de sortie fstream?
MISE À JOUR: Ma principale préoccupation concerne certaines choses que j'ai entendues au sujet d'un délai entre la sortie et toute donnée physiquement écrite sur le disque dur. Ma supposition était que la commande "save_file_obj < < save_str" enverrait seulement des données à une sorte de tampon et que la coche suivante "if (save_file_obj.bad())" ne serait d'aucune utilité pour déterminer s'il y avait un OS ou un matériel problème. Je voulais juste savoir quel était le moyen "catch all" définitif d'envoyer une chaîne à un fichier et vérifier pour s'assurer qu'il était écrit sur le disque, avant d'effectuer les actions suivantes telles que la fermeture du programme.
Je le code suivant ...
int Saver::output()
{
save_file_handle.open(file_name.c_str());
if (save_file_handle.is_open())
{
save_file_handle << save_str.c_str();
if (save_file_handle.bad())
{
x_message("Error - failed to save file");
return 0;
}
save_file_handle.close();
if (save_file_handle.bad())
{
x_message("Error - failed to save file");
return 0;
}
return 1;
}
else
{
x_message("Error - couldn't open save file");
return 0;
}
}
Qui a dit 'save_str' est un' std :: string'? : p Peut-être que c'est un modèle 'std :: basic_string <>' sur des 'char_traits' personnalisés, comme des traits insensibles à la casse ou quelque chose comme ça? : p – wilhelmtell
Dans ce cas, c'est std :: basic_string –
Truncheon