Quelle est la différence entre ios::ate
et ios:app
lors de l'écriture dans un fichier.
À mon avis, ios::app
vous donne la possibilité de vous déplacer dans le fichier, alors qu'avec ios::ate
il ne peut lire/écrire qu'à la fin du fichier. Est-ce correct?
C'est l'inverse. Quand ios::ate
est défini, la position initiale sera la fin du fichier, mais vous êtes libre de chercher par la suite. Quand ios::app
est défini, tous les opérations de sortie sont effectuées à la fin du fichier. Puisque toutes les écritures sont implicitement précédées de recherches, il n'y a aucun moyen d'écrire ailleurs.
Ils sont spécifiés comme suit (au 27.5.3.1.4 de C++ 11):
app
cherche à terminer avant chaque écriture
ate
ouvre et cherche à se terminer immédiatement après l'ouverture
Avec ios::app
la position d'écriture dans le fichier est "collante" - toutes les écritures sont à la fin, peu importe où vous cherchez.
C'est assez bien documenté ici .
ios::ate
"définit l'indicateur de position du flux à la fin du flux à l'ouverture."
ios::app
"définir l'indicateur de position du flux à la fin du flux avant chaque opération de sortie."
Cela signifie la différence que ios::ate
met votre position à la fin du fichier lorsque vous l'ouvrez. ios::app
le place à la fin du fichier à chaque fois que vous videz votre flux. Si, par exemple, vous deux programmes qui écrivent dans le même fichier journal ios::ate
remplacera tout ce qui a été ajouté au fichier par l'autre programme depuis que votre programme l'a ouvert. ios:app
passera à la fin du fichier chaque fois que votre programme ajoutera une entrée de journal.
on ne peut pas déplacer le pointeur. Ce ne sera qu'à la fin
nous pouvons déplacer le pointeur d'enregistrement vers n'importe quel autre endroit
Le ios::ate
L'option est pour les opérations d'entrée et de sortie et ios::app
nous permet d'ajouter des données à la fin du fichier.