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