如何使用 StreamWriter 写入文件?
How to Write to a file using StreamWriter?
在我的 Wpf 应用程序中,我使用了一个 class Person(这是一个基础 class),它包含一个虚拟方法 SaveData() 和其他 class 客户端继承自 Person。如何重写方法 SaveData() 并保留来自 base 的数据?
Class 人
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();
}
Class 客户
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 中的覆盖方法确实覆盖了其他数据,如姓名、年龄、出生日期...我需要将两者都保存在同一个文件中。
StreamWriter 是流装饰器,所以你最好实例化FileStream 并将其传递给StreamWriter 构造函数。因此,您可以自定义它。追加模式打开文件并将指针移动到文件末尾,因此您编写的下一个内容将被追加。并使用 using
指令而不是显式调用 Close()
:
人 class 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);
}
客户端class 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);
}
您应该将其拆分为两种方法:SaveData()
和 WriteData(StreamWriter file)
。 SaveData
创建流,然后调用 WriteData
。然后你只覆盖 WriteDate 方法,调用 base.
AlexDev 的回答是正确的。但是,如果您不能更改 Person 代码(假设您按文件存储数据),则可以使用 'append' 标志将数据添加到现有文件中。
但这不是最好的主意:
StreamWriter file = new StreamWriter(arqNome, append: true);
在我的 Wpf 应用程序中,我使用了一个 class Person(这是一个基础 class),它包含一个虚拟方法 SaveData() 和其他 class 客户端继承自 Person。如何重写方法 SaveData() 并保留来自 base 的数据?
Class 人
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();
}
Class 客户
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 中的覆盖方法确实覆盖了其他数据,如姓名、年龄、出生日期...我需要将两者都保存在同一个文件中。
StreamWriter 是流装饰器,所以你最好实例化FileStream 并将其传递给StreamWriter 构造函数。因此,您可以自定义它。追加模式打开文件并将指针移动到文件末尾,因此您编写的下一个内容将被追加。并使用 using
指令而不是显式调用 Close()
:
人 class 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);
}
客户端class 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);
}
您应该将其拆分为两种方法:SaveData()
和 WriteData(StreamWriter file)
。 SaveData
创建流,然后调用 WriteData
。然后你只覆盖 WriteDate 方法,调用 base.
AlexDev 的回答是正确的。但是,如果您不能更改 Person 代码(假设您按文件存储数据),则可以使用 'append' 标志将数据添加到现有文件中。 但这不是最好的主意:
StreamWriter file = new StreamWriter(arqNome, append: true);