2013-04-25 2 views
8

Ich versuche, eine bestimmte Textzeile in einer Datei hinzuzufügen. Speziell zwischen zwei Grenzen.Fügen Sie eine neue Zeile an einer bestimmten Position in einer Textdatei hinzu.

Ein Beispiel, wie es aussehen würde, wenn ich eine Linie zwischen den Grenzen von item1 hinzufügen wollte:

[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] 

Dies ist, was ich versucht habe, so weit, aber seine lange nicht richtig. Es sagt immer wieder, dass die Datei vom Leser benutzt wird, so dass sie vom Schreiber nicht bearbeitet werden kann. Wenn ich es zum Laufen brachte, löschte es das gesamte Dokument.

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"); 
    } 
} 

Ich würde auch gerne wissen, wie man Zeilen am Ende des Dokuments schreiben.

+0

Lesen Sie Ihre Datei, wie Sie in Ihrer vorherigen Frage zu tun und in eine neue Datei schreiben, während die neue Zeilen hinzufügen. – I4V

+0

Ich habe hinzugefügt, was ich versucht habe, ich denke, es ist sehr weit weg –

Antwort

13

Dies wird die Zeile, wo Sie es wünschen können. (Stellen Sie sicher, Sie haben using System.IO; hinzugefügt)

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. 
} 
+0

Dank dafür ist das einzige Problem, dass es mir sagt, dass die Datei verwendet wird, bei "using (File.Create (fileName)) { } " –

+0

Seltsam, es funktioniert gut für mich. Haben Sie einen anderen Code, der die Datei verwendet? Sie brauchen dazu keinen 'FileStream',' StreamWriter' oder 'StreamReader'. –

+0

Ah, tut mir leid. Eine meiner anderen Methoden hat deine Person beeinflusst. Wie auch immer, es scheint im Moment großartig zu funktionieren, Danke :) –

2

Sie sollten nicht Ihre Datei zweimal öffnen, versuchen Sie dies:

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

andere Think Logik Linie zum Einfügen, vielleicht einfacher Weg ist, Daten Zeile für Zeile in neue Datei einfügen neuen Teil zu kopieren, wenn erforderlich und fortsetzen. Oder mach es in Erinnerung.

Um Zeile am Ende fügen Sie FileMode.APPEND oder tun versuchen, Ihren eigenen

0

versuchen, diese Methode

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); 
     } 
    }