web-dev-qa-db-fra.com

Gestion des fichiers C ++: Différence entre ios :: app et ios :: ate?

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?

54
Adam_G

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.

65
Jon Purdy

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.

33
Steve Jessop

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.

23
Haatschii

App:

on ne peut pas déplacer le pointeur. Ce ne sera qu'à la fin

A mangé:

nous pouvons déplacer le pointeur d'enregistrement vers n'importe quel autre endroit

8
naveen

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.

0