Duplicata possible:
Dois-je fermer manuellement un ifstream?
Dois-je appeler fstream.close()
ou fstream
est-il un objet RAII approprié qui ferme le flux lors de la destruction?
J'ai un objet std::ofstream
Local dans une méthode. Puis-je supposer que le fichier est toujours fermé après avoir quitté cette méthode sans appeler close? Je n'ai pas pu trouver de documentation sur le destructeur.
Je pense que les réponses précédentes sont trompeuses.
fstream
est un objet RAII approprié, il fait se ferme automatiquement à la fin de la portée, et il n'y a absolument aucun besoin d'appeler close
manuellement lors de la fermeture à la fin de la la portée est suffisante.
En particulier, ce n'est pas une "meilleure pratique" et il n'est pas nécessaire de vider la sortie.
Et bien que Drakosha ait raison d'appeler close
vous donne la possibilité de vérifier le bit d'échec du flux, personne ne le fait de toute façon.
Dans un monde idéal, il suffit d'appeler stream.exception(ios::failbit)
au préalable et de gérer l'exception qui est levée dans le destructeur d'un fstream
. Mais malheureusement, les exceptions dans les destructeurs sont un concept cassé en C++, donc ce n'est pas une bonne idée.
Donc si vous voulez vérifier le succès de la fermeture d'un fichier, faites-le manuellement (mais alors seulement).
Pour ajouter à la réponse d'Amy Lee, il est préférable de le faire manuellement, car vous pouvez également vérifier les erreurs.
BTW, selon page de manuel "close" :
Ne pas vérifier la valeur de retour de close () est une erreur de programmation courante mais néanmoins sérieuse . Il est tout à fait possible que des erreurs sur une opération d'écriture précédente (2) soient d'abord signalées à la fermeture finale (). Ne pas vérifier la valeur de retour lors de la fermeture du fichier peut entraîner une perte silencieuse de données. Cela peut notamment être observé avec NFS et avec le quota de disque.
Une fermeture réussie ne garantit pas que les données ont bien été enregistrées sur le disque , comme l'écrit le noyau diffère. Il n'est pas courant qu'un système de fichiers vide les tampons lorsque le flux est fermé. Si vous devez être sûr que les données sont stockées physiquement, utilisez fsync (2). (Cela dépendra du matériel du disque à ce stade.)
Je pense que c'est une bonne pratique de fermer votre flux, car vous devez vider le tampon, ce que l'on m'a dit