2017-05-29 13 views
5

मैं एक संगीत खिलाड़ी बना रहा हूं। इसमें 2 रूप हैं; एक मुख्य क्षेत्र है जहां आप संगीत खेलते हैं। दूसरे फॉर्म में एक चेकडलिस्टबॉक्स है जहां आप अपने इच्छित एमपी 3 का चयन करते हैं। जब मैं एक बटन पर क्लिक करता हूं, तो यह चयन को .txt फ़ाइल में सहेजता है, इसलिए मैं उन्हें पहले फॉर्म में एक्सेस कर सकता हूं, जहां मैं फ़ाइलों को ढूंढने के लिए स्ट्रिंग्स को संगीत प्लेयर के पथ में डाल दूंगा।एक फ़ाइल को ओवरराइट कैसे करें यदि यह पहले से मौजूद है?

यह मेरे दूसरे रूप में कोड है, जहां मैं चयनित गीतों को .txt फ़ाइलों में सहेजता हूं।

private void selectbtn_Click(object sender, EventArgs e) 
{ 
    if (File.Exists(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt")) 
    { 
     File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", String.Empty); 
    } 

    string[] checkedtitles = new string[checkedListBox1.CheckedItems.Count]; 

    for (int ii = 0; ii < checkedListBox1.CheckedItems.Count; ii++) 
    { 
     checkedtitles[ii] = checkedListBox1.CheckedItems[ii].ToString(); 
    } 
    string selectedSongs = String.Join(Environment.NewLine, checkedtitles); 

    songRecord.writeRecord(selectedSongs); //I initialised the class containing streamwriter/reader, and called it songRecord 
    this.Close(); 
} 

समस्या मैं पुनर्लेखन नहीं कर सकता/.txt फ़ाइल स्पष्ट है, जब भी मैं कार्यक्रम को बंद करने और उसे पुनः खोलें। यह सिर्फ मौजूदा फाइल पर जोड़ता है। क्या ऐसा कुछ है जो मैं सही नहीं कर रहा हूं?

यहां मेरा स्ट्रीमर/लेखक कोड है। मैं बहुत यकीन है कि मैं भी चलाने के बाद इसे बंद कर दिया, लेकिन शायद किसी को क्या गलत है यह पता लगाने कर सकते हैं:

namespace songss 
{ 
    class DataRecord 
    { 
    public void writeRecord(string line) 
    { 
     StreamWriter sw = null; 
     try 
     { 
      sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true); 
      sw.WriteLine(line); 
     } 
     catch (FileNotFoundException) 
     { 
      Console.WriteLine("Error: File not found."); 
     } 
     catch (IOException) 
     { 
      Console.WriteLine("Error: IO"); 
     } 
     catch(Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      if (sw != null) 
       sw.Close(); 
     } 
     } 

public void readRecord() 
    { 
     StreamReader sr = null; 
     string myInputline; 
     try 
     { 
      sr = new StreamReader(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt"); 
      while ((myInputline = sr.ReadLine()) != null) ; //readline reads whole line 
      Console.WriteLine(myInputline); 
     } 
     catch (FileNotFoundException) 
     { 
      Console.WriteLine("Error: File not found"); 
     } 
     catch(IOException) 
     { 
      Console.WriteLine("Error: IO"); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
     finally 
     { 
      if (sr != null) 
       sr.Close(); 
     } 
    } 
    } 
    } 
+2

यदि आप मौजूद हैं तो आप फ़ाइल को क्यों हटा नहीं सकते? – JohanP

+2

आपका 'songRecord.writeRecord' क्या कर रहा है?यदि आप इसे पोंछने से पहले फ़ाइल खोल रहे हैं, तो हो सकता है कि यह पहले से ही पाठ में पढ़ा हो। – Rob

+0

एपीआई दस्तावेज 'File.WriteAllText' के अनुसार सामग्री को प्रतिस्थापित करना चाहिए। यदि ऐसा नहीं होता है, तो एक बग रिपोर्ट दर्ज करें। –

उत्तर

11

File.WriteAllText आप क्या चाहते हैं क्या करना चाहिए।

एक नई फ़ाइल बनाता है, फ़ाइल में निर्दिष्ट स्ट्रिंग लिखता है, और फिर फ़ाइल बंद कर देता है। यदि लक्ष्य फ़ाइल पहले से मौजूद है, तो यह अधिलेखित है।

डिफ़ॉल्ट एन्कोडिंग का उपयोग कर और आकार बफ़र द्वारा निर्दिष्ट फ़ाइल के लिए StreamWriter वर्ग का एक नया उदाहरण आरंभीकृत:

StreamWriter class भी/संलग्न अधिलेखित करने का विकल्प है। अगर फ़ाइल मौजूद है, तो इसे या तो ओवरराइट या जोड़ा जा सकता है।

public StreamWriter(
    string path, 
    bool append 
) 

उदाहरण:

using (StreamWriter writer = new StreamWriter("test.txt", false)){ 
    writer.Write(textToAdd); 
} 

, अपने कोड को देखते हुए आप true संलग्न जिसका मतलब है कि में गुजर रहे हैं।

sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true); 
sw.WriteLine(line); 
1

निकोलस सही है। मैंने अपने StreamWriter को गलत के रूप में पारित करने के लिए बदल दिया और समस्या को हल किया। मुझे File.WriteAllText का उपयोग करने की आवश्यकता नहीं थी, क्योंकि इसे गलत के रूप में पास करने से जुड़ा नहीं जाएगा।

धन्यवाद!

0

उपयोग इस

File.WriteAllText(@"C:\Users\Me\Desktop\JAM_MACHINE\JAMS\record.txt", line); 

बजाय

sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true); 
      sw.WriteLine(line); 
0

के माइक्रोसॉफ्ट द्वारा प्रदान समाधान के लिए इस लिंक का संदर्भ लें:

: ( https://msdn.microsoft.com/en-us/library/system.io.file.appendtext(v=vs.110).aspx)

यहाँ मौजूदा फ़ाइल संलग्न करने के लिए कोड है

StreamWriter writer = File.AppendText(Filepath); 
writer.WriteLine(content); 
writer.Close(); 
संबंधित मुद्दे