Comment enregistrer les modifs d'un fichier texte?

Bonjour,
J’ai un fichier texte que je charge dans un TextArea puis j’enregistre ses modifications.
Lors de l’enregistrement (ci ci-dessous) le contenu du TextArea se rajoute au contenu du fichier texte initial au lieu de le remplacer ! (double texte + modifs). Comment faire pour n’ajouter que les modifications au fichier ?

Dim  t As TextOutputStream
Dim f As FolderItem = SpecialFolder.Desktop.Child("MyFile.txt")
If f <> Nil Then
  if f.Exists Then
    Try
            t = TextOutputStream.Open(f)
    
           //t.Writeline(TextArea1.Text)
      t.Write(TextArea1.Text)
      t.Close
    Catch e As IOException
       MsgBox("Erreur d'accès au fichier !")
    End Try
  End If
End

Merci.

As-tu lu la doc pour TextOutputStream ?

This code appends the text in TextField1 to the text file that was opened

C’est ce que tu fais.

Doit-on attendre que tu poses la question en anglais ?
Emile t’a demandé d’indiquer les solutions à tes questions.
Les forums sont à double sens et pas uniquement vers toi…
Ce sera ma dernière réponse.

1 Like

“Doit-on attendre que tu poses la question en anglais ?”
Ah bon ? Je ne savais pas que ca posait des soucis à certaines personnes…
Ok, je vais notifier les solutions, je ne savais pas.
Je suis a fond sur un projet, après avoir arrêté la programmation pendant 10 ans, donc effectivement c’est un peu à sens unique en ce moment car j’ai la tête dans le guidon.
Effectivement, mais tous les exemples que j’ai lu utilisent “TextOutputStream”, alors si ce n’est pas cette commande, ce serait sympa de m’indiquer laquelle, ?

D’après la documentation, la méthode Write ne peut qu’écrire à partir de la fin. Donc pour remplacer le contenu il faudrait d’abord vider le fichier, sauf qu’il n’y a pas de méthode pour ce faire.

Ma suggestion est de:

  • Fermer le fichier une fois lu
  • Quand l’utilisateur clique un bouton pour sauvegarder le texte:
  • Copier le fichier original, supposons texte.txt dans texte.BAK. Si le fichier .BAK existe il faut d’abord le détruire
  • Recréer le fichier texte.txt
  • Puis exécuter la méthode Write dans le fichier recréé

Voire l’aide sur FolderItem.

Merci pour ta réponse c’est très clair.
Sauf que moi c’est pour éditer le fichier .hosts donc ca se complique un peu mais dans le principe je pense que ce soit être la même démarche.
FolderItem je commence à bien le maitriser.

Il est vrai que lire la documentation, ça aide.

Regardes donc ici:

http://documentation.xojo.com/api/files/textoutputstream.html#textoutputstream-create

Et tu sauras faire exactement ce que tu as demandé (enfin, pas dans le titre qui lui ne parle que des modifications, ce qui est autre chose (a)).

(a). Le vieux (très vieux) World enregistrait par défaut toutes les modifications apportées au document à la suite. Pour obtenir le contenu du document dans le fichier, il y avait une procéduere spéciale et World écrivait le document “tel quel” dans le fichier (du début à la fin, pas la liste des modifications à la suite les unes des autres…). Plus lent à l’écriture, mais plus rapide à la lecture (le fichier était lu d’un coup, et pas reconstitué à partir de toutes les modifications…).