Ajouter une nouvelle ligne à une position spécifique dans un fichier texte.

J’essaie d’append une ligne de texte spécifique dans un fichier. Plus précisément entre deux limites.

Un exemple de ce à quoi ça ressemblerait si je voulais append une ligne entre les limites de item1

[item1] 2550 coins 995 200000 7 2550 coins 995 200000 7 2550 coins 995 200000 7 2550 coins 995 200000 7 2550 coins 995 200000 7 //Add a line here in between the specific boundaries [/item1] [item2] 2550 coins 995 200000 7 2550 coins 995 200000 7 2550 coins 995 200000 8 2550 coins 995 200000 7 2550 coins 995 200000 7 [/item2] [item3] 2550 coins 995 200000 7 2550 coins 995 200000 7 2550 coins 995 200000 7 2550 coins 995 200000 7 2550 coins 995 200000 7 [/item3] 

C’est ce que j’ai essayé jusqu’à présent, mais c’est loin d’être correct. Il n’arrête pas de dire que le fichier est utilisé par le lecteur, il ne peut donc pas être édité par le rédacteur. Lorsque j’ai réussi à le faire fonctionner, il a effacé tout le document.

 public void createEntry(Ssortingng npcName) { Ssortingng line; Ssortingng fileName = "Drops.de"; StreamWriter streamWriter = new StreamWriter(fileName); StreamReader streamReader = new StreamReader(fileName); line = streamReader.ReadLine(); if (line == ("[" + npcName + "]")) { streamReader.ReadLine(); streamWriter.WriteLine("Test"); } } 

J’aimerais aussi savoir comment écrire des lignes à la fin du document.

Cela va append la ligne où vous le souhaitez. (Assurez-vous que vous avez using System.IO; ajouté)

 public void CreateEntry(ssortingng npcName) //npcName = "item1" { var fileName = "test.txt"; var endTag = Ssortingng.Format("[/{0}]", npcName); var lineToAdd = "//Add a line here in between the specific boundaries"; var txtLines = File.ReadAllLines(fileName).ToList(); //Fill a list with the lines from the txt file. txtLines.Insert(txtLines.IndexOf(endTag), lineToAdd); //Insert the line you want to add last under the tag 'item1'. File.WriteAllLines(fileName, txtLines); //Add the lines including the new one. } 

Vous ne devriez pas ouvrir votre fichier deux fois, essayez ceci:

 FileStream fileStream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None); StreamWriter streamWriter = new StreamWriter(fileStream); StreamReader streamReader = new StreamReader(fileStream); 

Une autre façon de penser est la logique pour insérer une ligne, peut-être qu’un moyen plus simple consiste à copier les données ligne par ligne dans un nouveau fichier, à insérer une nouvelle partie si nécessaire et à continuer. Ou le faire en mémoire.

Pour append une ligne à la fin, vous pouvez utiliser FileMode.Append ou faire votre propre recherche

essayez cette méthode

 using System.IO; using System.Linq; ///  /// Add a new line at a specific position in a simple file ///  /// Complete file path /// Line to search in the file (first occurrence) /// Line to be added /// insert above(false) or below(true) of the search line. Default: above  internal static void insertLineToSimpleFile(ssortingng fileName, ssortingng lineToSearch, ssortingng lineToAdd, bool aboveBelow = false) { var txtLines = File.ReadAllLines(fileName).ToList(); int index = aboveBelow?txtLines.IndexOf(lineToSearch)+1: txtLines.IndexOf(lineToSearch); if (index > 0) { txtLines.Insert(index, lineToAdd); File.WriteAllLines(fileName, txtLines); } }