2016-01-26 56 views
3

在我的Wpf應用程序中我使用一個Person類(這是一個基類),並且包含一個虛擬方法SaveData()和其他從Person繼承的類Client。如何覆蓋方法SaveData()並保持基數據?如何使用StreamWriter寫入文件?

類人

public virtual void SaveData() 
     { 
      string arqName = string.Format("Person{0}" + ".txt", Id); 
      StreamWriter file = new StreamWriter(arqNome); 
      file.WriteLine("ID: " + Id); 
      file.WriteLine("DOB: " + dOB); 
      file.WriteLine("Name: " + name); 
      file.WriteLine("Age: " + age); 
      file.Flush(); 
      file.Close(); 
     } 

類客戶端

public override void SaveData() 
     { 
      base.SaveData(); 
      string arqName = string.Format("Person{0}" + ".txt", Id); 
      StreamWriter file = new StreamWriter(arqNome); 
      file.WriteLine("Cod: " + cod); 
      file.WriteLine("Credits: " + credits); 
      file.Flush(); 
      file.Close(); 
     } 

在客戶端覆蓋方法確實可以替代其他數據如姓名,年齡,出生日期...我需要mantains無論是在同一個文件中。

回答

8

StreamWriter是流裝飾器,因此您最好實例化FileStream並將其傳遞給StreamWriter構造函數。因此您可以自定義它。追加模式打開文件並將指針移動到文件末尾,因此您寫入的下一個內容將被追加。並使用using指令insted的顯式調用Close()
Person類保存數據():

using (var fileStream = new FileStream(String.Format("Person{0}.txt", Id), FileMode.OpenOrCreate)) 
using (var streamWriter = new StreamWriter(fileStream)) 
{ 
    streamWriter.WriteLine("ID: " + Id); 
    streamWriter.WriteLine("DOB: " + dOB); 
    streamWriter.WriteLine("Name: " + name); 
    streamWriter.WriteLine("Age: " + age); 
} 

Client類保存數據():

base.SaveData(); 
using (var fileStream = new FileStream(String.Format("Person{0}.txt", Id), FileMode.Append)) 
using (var streamWriter = new StreamWriter(fileStream)) 
{ 
    streamWriter.WriteLine("Cod: " + cod); 
    streamWriter.WriteLine("Credits: " + credits); 
} 
+0

我相信這不會作爲原始代碼。因爲它會覆蓋Person數據 – Eugene

+0

@Eugene,謝謝,更新。 – Verbon

2

你應該把它分割成2種方法:SaveData()WriteData(StreamWriter file)SaveData創建流,然後調用WriteData。然後,您只覆蓋WriteDate方法,調用基礎。

+0

你能告訴我一個簡單的例子嗎? –

1

AlexDev的回答是正確的。但是,如果您不能更改Person代碼(並且假設您爲每個文件存儲數據),則可以使用「append」標誌將數據添加到現有文件中。 但它不是最好的主意:

StreamWriter file = new StreamWriter(arqNome, append: true); 
相關問題