Comment tronquer un fichier alors qu'il est ouvert avec fstream
Je sais qu'il est possible de tronquer un fichier avec
std::fstream fs(mypath, std::fstream::out | std::fstream::trunc);
mais j'ai besoin de lire le fichier, de le tronquer, puis d'écrire de nouveaux contenus tous avec le même descripteur de fichier (donc l'ensemble de l'opération est atomique). Quelqu'un?
Le flux de fichiers ne permet pas cette fonctionnalité autant que je sache. Vous devez fermer et rouvrir le fichier de flux avec
trunc
de le faire.OriginalL'auteur Elliot Cameron | 2013-12-27
Vous devez vous connecter pour publier un commentaire.
Flux de fichiers ne prennent pas en charge la troncature, sauf lors de l'ouverture d'un fichier. Aussi, les opérations ne serait pas "atomique" de toute façon: au moins, sur les systèmes POSIX vous vous ferez un plaisir de lire et écrire un fichier déjà ouvert par un autre processus.
OriginalL'auteur Dietmar Kühl
Je ne pense pas que vous pouvez obtenir "atomique" de l'opération, mais à l'aide de la Système De Fichiers De Spécifications Techniques qui a été accepté dans le cadre de la La Bibliothèque Standard C++17) vous pouvez redimensionner le fichier comme ceci:
OriginalL'auteur Galik
C++ 11 prend en charge swap sur ofstream. Le mieux que j'ai pu imaginer faire serait d'ouvrir un fichier vide et l'appeler swap. Ce ne serait pas atomique, mais aussi proche que vous pouvez obtenir.
OriginalL'auteur TimDave