2017-05-29 16 views
5

Tôi đang tạo một trình phát nhạc. Nó có 2 hình thức; một là khu vực chính nơi bạn chơi nhạc. Hình thức thứ hai có một CheckedListBox nơi bạn chọn các mp3 bạn muốn. Khi tôi nhấp vào một nút, nó sẽ lưu lựa chọn trong một tệp .txt để tôi có thể truy cập chúng ở dạng đầu tiên, nơi tôi sẽ đặt các chuỗi vào đường dẫn cho trình phát nhạc để tìm tệp.Làm thế nào để ghi đè lên một tập tin nếu nó đã tồn tại?

Đây là mã trong biểu mẫu thứ hai của tôi, nơi tôi lưu các bài hát đã chọn vào tệp .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(); 
} 

Vấn đề là, bất cứ khi nào tôi đóng chương trình và mở lại, tôi không thể ghi đè/xóa tệp .txt. Nó chỉ thêm vào tệp hiện có. Có điều gì tôi không làm đúng không?

Đây là mã trình tạo luồng/ghi của tôi. Tôi chắc chắn rằng tôi đóng cửa sau khi chạy quá, nhưng có lẽ ai đó có thể tìm ra những gì là sai:

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

Tại sao bạn không xóa tệp nếu nó tồn tại? – JohanP

+2

«songRecord.writeRecord' của bạn đang làm gì?Nếu bạn đang mở tệp trước khi xóa nó, nó có thể đã đọc trong văn bản hiện tại. – Rob

+0

Theo tài liệu API 'File.WriteAllText' sẽ thay thế nội dung. Nếu không, hãy báo cáo lỗi. –

Trả lời

11

File.WriteAllText nên làm những gì bạn muốn.

Tạo tệp mới, viết chuỗi được chỉ định vào tệp và sau đó đóng tệp. Nếu tệp đích đã tồn tại, nó sẽ bị ghi đè.

Các StreamWriter class cũng có một tùy chọn để ghi đè/append:

Khởi một trường hợp mới của lớp StreamWriter cho quy định tập tin bằng cách sử dụng mã hóa mặc định, kích thước buffer. Nếu tệp tồn tại, nó có thể bị ghi đè hoặc được thêm vào.

public StreamWriter(
    string path, 
    bool append 
) 

Ví dụ:

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

Nhìn vào mã của bạn, bạn đang đi qua trong true có nghĩa thêm.

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

Nicholas đúng. Tôi đã thay đổi số StreamWriter của mình để chuyển thành sai và giải quyết được sự cố. Tôi cũng không cần phải sử dụng File.WriteAllText, vì việc chuyển nó là sai sẽ không nối thêm.

Cảm ơn bạn!

0

Sử dụng này

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

thay vì

sw = new StreamWriter(@"C:\Users\Me\Desktop\JAM_MACHINE\record.txt", true); 
      sw.WriteLine(line); 
Các vấn đề liên quan