using System; using System.Collections.Generic; using System.IO; using System.Runtime.Serialization; using notre_bibliotheque; namespace PersDataContract { /// /// Permet de sauvegarder/charger dans/depuis un fichier xml grâce au DataContract /// public class MyDataContract : IPercistance { public string FilePath { get; set; } = Path.Combine(Directory.GetCurrentDirectory(), "Pers"); private string fileName; private string FileNameComplet => Path.Combine(FilePath, fileName); /// /// Constructeur de MyDataContract /// /// Nom de fichier de sauvegarde/chargement /// Lors ce que le fichier n'existe pas, une excepetion est lancée public MyDataContract(string fileName) { this.fileName = fileName; } /// /// Permet de charger les donner depuis un fichier xml /// /// Un dictionaire avec une clef "Langages" et "Comptes" qui contiennent réspectivement des la liste des langages chargés et la liste des comptes chargés public Dictionary> ChargerLesDonnées() { if (!File.Exists(FileNameComplet)) { throw new ArgumentException("Le fichier spécifié n'existe pas"); } Dictionary> DictionaireÀRetourner = new Dictionary>(); DonnésÀSerialiser tmp; // Ce DataContractSerializer permet de lire un objet de type DonnésÀSerialiser DataContractSerializer serializer = new DataContractSerializer(typeof(DonnésÀSerialiser)); using(Stream fichierDeChargement = File.OpenRead(FileNameComplet)) { tmp = serializer.ReadObject(fichierDeChargement) as DonnésÀSerialiser; } DictionaireÀRetourner.Add("Langages", tmp.LangagesASauvegarder); DictionaireÀRetourner.Add("Comptes", tmp.ComptesASauvegarder); return DictionaireÀRetourner; } /// /// Permet de sauvegarder les données de l'application /// /// Liste des langages disponible dans l'application /// Liste des comptes de l'application public void SauvegarderLesDonnées(IEnumerable langagesASauvgarder, IEnumerable comptesÀSauvegarder) { if (!Directory.Exists(FilePath)) { Directory.CreateDirectory(FilePath); } //Ce DataContractSerializer permet d'ecire les données de l'application dans un fichier xml tout en préservant les référances DataContractSerializer serializer = new DataContractSerializer(typeof(DonnésÀSerialiser), new DataContractSerializerSettings() { PreserveObjectReferences = true }); DonnésÀSerialiser tmp = new DonnésÀSerialiser(langagesASauvgarder, comptesÀSauvegarder); using (Stream fichierDeSauvgarde = File.Create(FileNameComplet)) { serializer.WriteObject(fichierDeSauvgarde, tmp); } } } }