【问题标题】:How to Write to a file using StreamWriter?如何使用 StreamWriter 写入文件?
【发布时间】:2016-05-03 10:42:25
【问题描述】:

在我的 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();
}

Client 中的 override 方法确实将其他数据覆盖为 Name、Age、DOB... 我需要将两者都保存在同一个文件中。

【问题讨论】:

    标签: c# .net io streamwriter


    【解决方案1】:

    StreamWriter 是流装饰器,因此您最好实例化 FileStream 并将其传递给 StreamWriter 构造函数。因此,您可以自定义它。追加模式打开文件并将指针移动到文件末尾,因此您编写的下一个内容将被追加。并使用 using 指令明确调用 Close():
    人员类 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 数据
    【解决方案2】:

    AlexDev 的回答是正确的。但是,如果您不能更改个人代码(并且假设您存储每个文件的数据),您可以使用 'append' 标志将数据添加到现有文件中。 但这不是最好的主意:

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

    【讨论】:

      【解决方案3】:

      您应该将其拆分为 2 个方法:SaveData()WriteData(StreamWriter file)SaveData 创建流,然后调用 WriteData。然后只覆盖 WriteDate 方法,调用基类。

      【讨论】:

        猜你喜欢
        • 2014-06-22
        • 2020-05-23
        • 1970-01-01
        • 2014-02-22
        • 2018-08-24
        • 2011-10-29
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多