2013-04-25 20 views
8

Tôi đang cố thêm một dòng văn bản cụ thể vào một tệp. Cụ thể giữa hai ranh giới.Thêm một dòng mới tại một vị trí cụ thể trong một tệp văn bản.

Một ví dụ về những gì nó sẽ như thế nào nếu tôi muốn thêm một dòng ở giữa ranh giới của 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] 

Đây là những gì tôi đã cố gắng cho đến nay, tuy nhiên nó không nơi nào gần đúng. Nó tiếp tục nói rằng các tập tin đang được sử dụng bởi người đọc để nó không thể được chỉnh sửa bởi các nhà văn, khi tôi đã làm cho nó để làm việc nó xóa toàn bộ tài liệu.

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

Tôi cũng muốn biết cách viết dòng ở cuối tài liệu.

+0

đọc tập tin của bạn như bạn làm trong câu hỏi trước đây của bạn và ghi vào một file mới trong khi thêm dòng mới của bạn. – I4V

+0

Tôi đã thêm những gì tôi đã thử, tôi nghĩ rằng nó rất xa cho đến nay –

Trả lời

13

này sẽ thêm dòng nơi bạn muốn nó. (Hãy chắc chắn rằng bạn đã using System.IO; thêm)

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

Cảm ơn vì điều này, vấn đề duy nhất là nó giữ cho tôi biết rằng tập tin đang được sử dụng, tại "using (File.Create (fileName)) { } " –

+0

Lạ, nó hoạt động tốt cho tôi. Bạn có bất kỳ mã nào khác sử dụng tệp không? Bạn không cần bất kỳ 'FileStream',' StreamWriter' hoặc 'StreamReader' để làm việc này. –

+0

Ah, xin lỗi. Một trong những phương pháp khác của tôi đã ảnh hưởng đến một phương pháp của bạn. Dù sao nó có vẻ là làm việc tuyệt vời tại thời điểm này, Cảm ơn :) –

2

Bạn không nên mở tập tin của bạn hai lần, hãy thử này:

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

nghĩ khác là logic để chèn dòng, cách có thể dễ dàng hơn là để sao chép dòng dữ liệu bằng dòng vào tập tin mới, chèn phần mới khi cần thiết và tiếp tục. Hoặc làm điều đó trong bộ nhớ.

Để thêm dòng vào cuối bạn có thể sử dụng FileMode.Append hoặc làm của riêng bạn tìm

0

thử phương pháp này

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