Ecrire un fichier texte en mémoire et l'enregistrer avec savefiledialog
Je suis en train de faire un fichier texte dans la mémoire, d'ajouter quelques lignes à elle et à la fin enregistrez le fichier dans un fichier texte. Je peux gérer la savedialog partie mais je ne sais pas comment pour obtenir le fichier texte à partir de la mémoire. Toute l'aide et les conseils seront appriciated.
Ce que je fais jusqu'à présent est:
//Initialize in memory text writer
MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
tw.WriteLine("HELLO WORLD!");
tw.WriteLine("I WANT TO SAVE THIS FILE AS A .TXT FILE!);
veuillez noter
Je vais appeler tw.WriteLine() ajouter d'autres lignes à différents endroits donc je veux enregistrer ce à la fin du programme (ce shouldent être enveloppé entre quelque chose comme l'utilisation de{} )
Mise à JOUR
StringBuilder semble être une solution plus fiable pour ce faire! J'ai d'étranges découpes dans mon fichier texte quand je le fais à l'aide de MemoryStream.
Grâce.
source d'informationauteur Saeid Yazdani
Vous devez vous connecter pour publier un commentaire.
Je pense que le meilleur choix ici serait d'écrire à un
StringBuilder
et quand c'est fait,File.WriteAllText
. Si le contenu est grandvous pourriez envisager d'écrire directement dans le fichier, en premier lieu (viaFile.CreateText(path)
), mais pour de petites à moyennes fichiers ce devrait être bon.Ou, quelque chose de presque-le même que @la réponse de Marc, mais assez différent, je pense qu'il vaut le coup d'investir là comme une solution valable:
Où
path
est une chaîne de caractères représentant une entrée du système de fichiers chemin prédéfini par vous quelque part dans l'application.Assumer votre
SaveFileDialog
nom est "dialogue"ou
également dans votre solution, vous pouvez le faire :
Quelque chose comme ça.
Je n'ai pas inquiété de savoir si le fichier existe déjà, mais cela devrait vous obtenez près.
Vous pourriez avoir besoin d'un
ms.Seek(SeekOrgin.Begin, 0)
trop.Une autre façon de l'ajout de texte à la fin d'un fichier pourrait être:
supposant que
text
est la chaîne que vous avez besoin pour enregistrer votre fichier.Si vous voulez ajouter de nouvelles lignes à la chaîne dans un moyen facile, vous pouvez le faire:
et la chaîne résultante sera
sb.ToString()
Si vous avez déjà un
Stream
objet (dans votre exemple, unMemoryStream
), vous pouvez faire la même chose mais en remplaçant la ligne:par
Edit:
Sur l'ajustement de les instructions à l'intérieur
using
:Prendre en compte que ce n'est pas un problème du tout. Dans mon premier exemple, tout ce que vous avez à faire est de garder cette
StringBuilder
objet, et continuez à ajouter des lignes. Une fois que vous avez ce que vous voulez, il suffit d'écrire les données dans un fichier texte.Si vous prévoyez d'écrire plus d'une fois dans le fichier texte, juste effacer le
StringBuilder
chaque fois que vous écrire, afin de ne pas obtenir de données dupliquées.