J'essaie d'ajouter une ligne de texte spécifique dans un fichier. Plus précisément entre deux limites.
Un exemple de ce à quoi cela ressemblerait si je voulais ajouter 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(String npcName)
{
String line;
String 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 ajouter la ligne où vous le souhaitez. (Assurez-vous d'avoir ajouté using System.IO;
)
public void CreateEntry(string npcName) //npcName = "item1"
{
var fileName = "test.txt";
var endTag = String.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 ajouter une ligne à la fin, vous pouvez utiliser FileMode.Append ou faire votre propre recherche
essayez cette méthode
using System.IO;
using System.Linq;
/// <summary>
/// Add a new line at a specific position in a simple file
/// </summary>
/// <param name="fileName">Complete file path</param>
/// <param name="lineToSearch">Line to search in the file (first occurrence)</param>
/// <param name="lineToAdd">Line to be added</param>
/// <param name="aboveBelow">insert above(false) or below(true) of the search line. Default: above </param>
internal static void insertLineToSimpleFile(string fileName, string lineToSearch, string 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);
}
}