2013-04-25 19 views
8

Sto tentando di aggiungere una riga di testo specifica in un file. Specificamente tra due confini.Aggiungere una nuova riga in una posizione specifica in un file di testo.

Un esempio di quello che potrebbe apparire come se volessi aggiungere una linea tra i confini di 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] 

Questo è quello che ho provato finora, tuttavia la sua in nessun posto vicino corretta. Continua a dire che il file viene utilizzato dal lettore in modo che non possa essere modificato dallo scrittore, quando l'ho fatto funzionare ha cancellato l'intero documento.

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

Vorrei anche sapere come scrivere righe alla fine del documento.

+0

Leggi il file come fate nella vostra domanda precedente e scrivere in un nuovo file, mentre l'aggiunta vostre nuove linee. – I4V

+0

Ho aggiunto quello che ho provato, penso che sia molto lontano finora –

risposta

13

Questo aggiungerà la linea dove si desidera. (Assicurarsi di aver aggiunto 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. 
} 
+0

Grazie per questo, l'unico problema è che continua a dirmi che il file è in uso, in "using (File.Create (fileName)) { } " –

+0

Strano, funziona bene per me. Avete qualche altro codice che utilizza il file? Non hai bisogno di 'FileStream',' StreamWriter' o 'StreamReader' perché funzioni. –

+0

Ah, mi dispiace. Uno dei miei altri metodi stava influenzando il tuo. Ad ogni modo sembra funzionare alla grande in questo momento, grazie :) –

2

Si consiglia di non aprire il file due volte, provate questo:

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

un altro pensare è la logica per l'inserimento di linea, modo forse più semplice è quando necessario per copiare i dati riga per riga nel nuovo file, inserire il nuovo pezzo e Continua. O fallo nella memoria.

Per aggiungere riga alla fine è possibile utilizzare FileMode.APPEND o fare la propria cercano

0

provare questo metodo

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