web-dev-qa-db-fra.com

Comment écrire dans un fichier en utilisant StreamWriter?

dans mon application Wpf, j'utilise une classe Person (qui est une classe de base) et qui contient une méthode virtuelle SaveData () et une autre classe Client qui hérite de Person. Comment remplacer la méthode SaveData () et conserver les données de la base?

Personne de classe

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

Client de classe

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

La méthode de remplacement dans Client consiste en effet à remplacer les autres données comme le nom, l'âge, la date de naissance ... J'ai besoin de conserver les deux dans le même fichier.

6
Wesley Heron

StreamWriter est le décorateur de flux, il est donc préférable d'instancier FileStream et de le transmettre au constructeur StreamWriter. Ainsi, vous pouvez le personnaliser. Le mode ajout ouvre le fichier et déplace le pointeur à la fin du fichier, de sorte que la prochaine chose que vous écrivez sera ajoutée. Et utilisez la directive using au lieu d'appeler explicitement Close():
Classe de personne 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);
}

Classe client 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);
}
13
Verbon

Vous devez le diviser en 2 méthodes: SaveData() et WriteData(StreamWriter file). SaveData crée le flux et appelle ensuite WriteData. Ensuite, vous remplacez uniquement la méthode WriteDate, en appelant la base.

3
AlexDev

La réponse d'AlexDev est correcte. Mais si vous ne pouvez pas modifier le code personne (et étant donné que vous stockez des données par fichier), vous pouvez utiliser l'indicateur "ajouter" pour ajouter des données dans le fichier existant. Mais ce n'est pas la meilleure idée:

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