Je voudrais créer un fichier .txt et y écrire, et si le fichier existe déjà, je veux juste ajouter quelques lignes supplémentaires:
string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
File.Create(path);
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The very first line!");
tw.Close();
}
else if (File.Exists(path))
{
TextWriter tw = new StreamWriter(path);
tw.WriteLine("The next line!");
tw.Close();
}
Mais la première ligne semble toujours être écrasée ... comment éviter d'écrire sur la même ligne (j'utilise ceci en boucle)?
Je sais que c'est une chose assez simple, mais je n'ai jamais utilisé la WriteLine
méthode auparavant. Je suis totalement nouveau sur C #.
c#
text-files
Berker Yüceer
la source
la source
if (file exists) { open file }
est presque toujours faux dans tous les langages de programmation! Pour .NET, la solution consiste à utiliserFile.Open(path, FileMode.Append, FileAccess.ReadWrite)
avec les indicateurs appropriés.File.Open
délègue en interne à une fonction WinAPI (voir le commentaire suivant), espérons-le, empêchant la condition de concurrence. La plupart des solutions ici ne font pas cela et sont assez évidemment soumises aux conditions de course.Réponses:
Utilisez le bon constructeur :
la source
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
et vérifier la taille du fichier via ce flux renvoyé.Voir aussi File.AppendAllText (). AppendAllLines ajoutera une nouvelle ligne à chaque ligne sans avoir à la mettre vous-même.
Les deux méthodes créeront le fichier s'il n'existe pas afin que vous n'ayez pas à le faire.
la source
la source
Close()
partir d'uneusing
instruction, car toutes les ressources seront fermées avant d'être supprimées automatiquement.Vous n'êtes pas obligé de vérifier si le fichier existe, car StreamWriter le fera pour vous. Si vous l'ouvrez en mode ajout, le fichier sera créé s'il n'existe pas, alors vous l'ajouterez toujours et ne le surchargerez jamais. Votre vérification initiale est donc redondante.
la source
File.AppendAllText ajoute une chaîne à un fichier. Il crée également un fichier texte si le fichier n'existe pas. Si vous n'avez pas besoin de lire le contenu, c'est très efficace. Le cas d'utilisation est la journalisation.
la source
Vous voulez simplement ouvrir le fichier en mode «ajout».
http://msdn.microsoft.com/en-us/library/3zc0w663.aspx
la source
Lorsque vous démarrez StreamWriter, il remplace le texte avant. Vous pouvez utiliser la propriété append comme ceci:
la source
la source
File.Open(path, FileMode.Append, FileAccess.ReadWrite)
et vérifier la taille du fichier via ce flux renvoyé.Vous pouvez utiliser un FileStream. Cela fait tout le travail pour vous.
http://www.csharp-examples.net/filestream-open-file/
la source
Essaye ça.
la source
File.AppendText(path)
, et avec lui pas besoin de vérifierFile.Exists(path)
. EtIf (not A) Else If (A)
c'est un étrange If / Else. Fondamentalement, il n'y a rien de bon dans cette question, pas de code d'explication qui soit une version rédudante d'une autre réponse.File.Open(path, FileMode.Append, FileAccess.ReadWrite)
et vérifier la taille du fichier via ce flux renvoyé.Vous pouvez simplement utiliser la méthode File.AppendAllText () pour résoudre votre problème. Cette méthode se chargera de la création du fichier s'il n'est pas disponible, de l'ouverture et de la fermeture du fichier.
la source
À partir de la documentation Microsoft, vous pouvez créer un fichier s'il n'existe pas et y ajouter en un seul appel File.AppendAllText, méthode (chaîne, chaîne)
.NET Framework (version actuelle) Autres versions
Ouvre un fichier, ajoute la chaîne spécifiée au fichier, puis ferme le fichier. Si le fichier n'existe pas, cette méthode crée un fichier, écrit la chaîne spécifiée dans le fichier, puis ferme le fichier. Espace de noms: System.IO Assembly: mscorlib (dans mscorlib.dll)
Syntaxe C # C ++ F # VB public static void AppendAllText (chemin de la chaîne, contenu de la chaîne) Paramètres chemin Type: System.String Le fichier auquel ajouter la chaîne spécifiée. contents Type: System.String La chaîne à ajouter au fichier.
AppendAllText
la source
la source