2017-05-29 61 views
5

Müzik çalar yapıyorum. 2 formu vardır; Birisi müzik çaldığınız ana alandır. İkinci formda istediğiniz mp3leri seçtiğiniz bir CheckedListBox vardır. Bir düğmeyi tıklattığımda, bir .txt dosyasındaki seçimi kaydeder, böylece ilk formda dizelere erişebilirim; burada dosyaları bulmak için dizeleri müzik çaların yollarına koyacağım.Dosya Zaten Varsa Nasıl Yazılır?

Bu, ikinci formumdaki, seçili parçaları .txt dosyalarına kaydettiğim kod. Programa kapatıp yeniden açtığınızda

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

Sorun/yeniden .txt dosyası temizlemek olamaz, vardır. Sadece mevcut dosyaya ekler. Yapmadığım bir şey var mı?

Benim streamreader/yazar kodlarım. Ben de çalıştırdıktan sonra kapatmış, ama belki de birileri yanlış anlamaya eminim:

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

Neden dosyayı varsa silmiyorsunuz? – JohanP

+2

'songRecord.writeRecord' nedir?Dosyayı silmeden önce açarsanız, mevcut metinde zaten okumuş olabilir. – Rob

+0

API belgelerine göre 'File.WriteAllText 'içeriğini değiştirmelidir. Yoksa, bir hata raporu gönderin. –

cevap

11

File.WriteAllText istediğini yapmalıdır.

Yeni bir dosya oluşturur, belirtilen dizeyi dosyaya yazar ve sonra dosyayı kapatır. Hedef dosya zaten varsa, üzerine yazılır.

varsayılan kodlama kullanılarak ve geçici bellek, boyutuna göre belirlenen dosya StreamWriter sınıfı için yeni bir örneğini başlatır:

StreamWriter class

da/ilave üzerine yazmak için bir seçenek vardır. dosya varsa, üzerine yazılabilir veya eklenebilir.

public StreamWriter(
    string path, 
    bool append 
) 

Örnek:

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

sen eklemek demektir true yılında geçiyoruz Kodunuzla bakarak.

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

Nicholas haklı. Yanlış olarak iletmek için StreamWriter değiştirdim ve bu sorunu çözdü. File.WriteAllText'u kullanmam gerekmiyordu, çünkü yanlış olarak iletilmeyecek.

Teşekkür ederiz!

0

bunu kullanın

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

yerine

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