如何使用StreamWriter将内容写入文件?

6
在我的Wpf应用程序中,我使用了一个名为Person的类(它是一个基类),其中包含一个虚方法SaveData(),以及另一个继承自Person的类Client。如何覆盖SaveData()方法并保留来自基类的数据?
类Person:
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();
}

Client类中的覆盖方法确实会覆盖其他数据,例如姓名、年龄、出生日期等... 我需要在同一个文件中维护它们。

3个回答

15

StreamWriter是流的修饰器,因此最好实例化FileStream并将其传递给StreamWriter构造函数。这样您可以自定义它。Append模式打开文件并将指针移动到文件末尾,因此您写入的下一个内容会被追加。使用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);
}

我相信这个原始代码也不会起作用。因为它会覆盖掉Person的数据。 - Eugene

3
你应该将其拆分为2个方法:SaveData()WriteData(StreamWriter file)SaveData创建流并调用WriteData。然后你只需要重写WriteData方法,调用基类即可。

2

AlexDev的回答是正确的。但是如果您无法更改Person代码(并且考虑到您按文件存储数据),则可以使用“append”标志将数据添加到现有文件中。但这不是最好的选择:

StreamWriter file = new StreamWriter(arqNome, append: true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接