簡體   English   中英

如何使用StreamWriter寫入文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM