2013-04-25 7 views
8

मैं एक फ़ाइल में पाठ की एक विशिष्ट पंक्ति जोड़ने की कोशिश कर रहा हूं। विशेष रूप से दो सीमाओं के बीच।टेक्स्ट फ़ाइल में किसी विशिष्ट स्थिति पर एक नई पंक्ति जोड़ें।

यह कैसा अगर मैं 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] 

यह मैं अब तक, क्या कोशिश की है लेकिन इसका सही के पास कहीं नहीं है। यह कहता रहता है कि फ़ाइल का उपयोग पाठक द्वारा किया जा रहा है, इसलिए इसे लेखक द्वारा संपादित नहीं किया जा सकता है, जब मैंने इसे काम करने के लिए पूरा किया तो यह पूरे दस्तावेज़ को मंजूरी दे दी।

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

मैं यह भी जानना चाहूंगा कि दस्तावेज़ के अंत में लाइनें कैसे लिखें।

+0

कोशिश अपनी फ़ाइल पढ़ें आप अपने पिछले प्रश्न में करते हैं और जब तक अपनी नई लाइनों को जोड़ने एक नई फ़ाइल लिखें। – I4V

+0

मैंने जो जोड़ा है, मैंने जोड़ा है, मुझे लगता है कि यह अब तक बहुत दूर है –

उत्तर

13

इस लाइन आप जहां चाहें जोड़ देगा। (सुनिश्चित करें कि आप 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

इसके लिए धन्यवाद, केवल समस्या यह है कि यह मुझे बताती है कि फ़ाइल का उपयोग "फ़ाइल (क्रिएट (फ़ाइल नाम)) पर { } " –

+0

अजीब, यह मेरे लिए ठीक काम करता है। क्या आपके पास फ़ाइल का उपयोग करने वाला कोई अन्य कोड है? काम करने के लिए आपको किसी भी 'फ़ाइलस्ट्रीम', 'स्ट्रीमवाइटर' या 'स्ट्रीम रीडर' की आवश्यकता नहीं है। –

+0

आह, क्षमा करें। मेरी अन्य विधियों में से एक आपके प्रभाव को प्रभावित कर रहा था। वैसे भी यह इस समय बहुत अच्छा काम कर रहा है, धन्यवाद :) –

2

आप दो बार अपनी फ़ाइल नहीं खोलना चाहिए, इस कोशिश:

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

एक और थिंक लाइन डालने के लिए तर्क है, हो सकता है आसान तरीका जब जरूरत नई फ़ाइल में लाइन द्वारा डाटा लाइन कॉपी करने के लिए, नया हिस्सा सम्मिलित है और जारी रहना। या स्मृति में करो।

अंत आप FileMode.Append या अपना खुद कर सकते हैं करने के लिए लाइन को जोड़ने के लिए की तलाश

0

इस विधि

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); 
     } 
    } 
संबंधित मुद्दे