[英]How to Write to a file using StreamWriter?
在我的Wpf應用程序中,我使用的是Person類(即基類),它包含一個虛方法SaveData(),以及其他繼承自Person的類Client。 如何覆蓋方法SaveData()並保持數據從基數?
班級人員
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();
}
客戶端中的覆蓋方法確實覆蓋了其他數據,如Name,Age,DOB ......我需要在同一個文件中保留兩者。
StreamWriter是流裝飾器,因此您可以更好地實例化FileStream並將其傳遞給StreamWriter構造函數。 因此,您可以自定義它。 追加模式打開文件並將指針移動到文件末尾,因此您要編寫的下一個內容將被追加。 並使用using
指令顯式調用Close()
:
Person類SaveData():
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);
}
客戶端類SaveData():
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);
}
您應該將其拆分為2個方法: SaveData()
和WriteData(StreamWriter file)
。 SaveData
創建流,然后調用WriteData
。 然后,只覆蓋WriteDate方法,調用基數。
AlexDev的回答是正確的。 但是如果你不能改變Person代碼(並且假設你存儲每個文件的數據),你可以使用'append'標志將數據添加到現有文件中。 但這不是最好的主意:
StreamWriter file = new StreamWriter(arqNome, append: true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.