繁体   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