|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
SAUVEGARDE/CHARGEMENT DE PROPRIÉTÉS D'UN OBJET
Information sur la source
Description
Ceci est un petit composant permettant de sauvegarder/charger les propriétés de n'importe quel objet. Les-dites propriétés sont stockées dans un fichier de sérialisation zippé. Les thèmes abordés pour ce code sont principallement la sérialisation, le zippage de fichier avec la librairie SharpZipLib, un peu de flux, la récupération de la liste des nom des propriétés d'un objet ainsi que les valeurs associées à ces propriétés, et l'assignation de valeurs à des propriétés en fonction de leur nom.
Ce code a été compilé avec le Framework SDK 1.1, et à l'aide de l'excélent SharpDevelop. Vous trouverez dans le zip le composant en lui même, ainsi qu'un exécutable de tests.
Tiens mais au fait, à quoi tout celà peut-il bien servir ? Et bien la sauvegarde de propriétés est bien pratique par exemple pour qu'une fenêtre soit replacée au même endroit que lorsqu'elle a été fermée. Si l'utilisateur a laissé la fenêtre en grand avant de quitter, et ien la fenêtre sera de nouveau grande au prochain lancement du prog. Mais bien sûr, tout ceci s'applique aux forms, mais aussi à n'importe quel type d'objet.
Il est à noter que seules les propriétés accessibles en lecture et en écriture, et sérialisables sont sauvegardées.
Source
- /*
- * Created by SharpDevelop.
- * User: Yo
- * Date: 03/12/2004
- * Time: 22:51
- *
- * To change this template use Tools | Options | Coding | Edit Standard Headers.
- */
- using System;
- using System.Drawing;
- using System.Windows.Forms;
- using System.ComponentModel;
- using System.Reflection;
- using System.Collections;
- using System.IO;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.Runtime.Serialization;
- using ICSharpCode.SharpZipLib.Zip;
-
- namespace PropertiesKeeperNS{
- /// <summary>
- /// Permet de stocker et restaurer les propriétés d'un objet, quel qu'il soit. Les propriétés
- /// chargées et sauvegardées doivent être accessibles en lecture/écriture, et doivent être
- /// sérialisables.
- /// </summary>
- public class PropertiesKeeper : System.Windows.Forms.Control{
- private PropertyAndValueList PropertySaver = new PropertyAndValueList();
-
- private Control m_Ctrl = null;
- public Control Ctrl{
- set{m_Ctrl = value;}
- get{return m_Ctrl;}
- }
-
- public PropertiesKeeper(){
-
- }
-
- /// <summary>
- /// Permet de charger le fichier de configuration.
- /// </summary>
- /// <param name="FileName">Le nom du fichier à charger.</param>
- public void Load(string FileName){
- if(m_Ctrl == null) return;
-
- ZipInputStream zip = new ZipInputStream(new FileStream(FileName,FileMode.Open,FileAccess.Read));
- ZipEntry zip_entry;
- while((zip_entry = zip.GetNextEntry())!=null){
- try{
- if(zip_entry.Name == "conf"){
- MemoryStream stream = new MemoryStream();
- int count;
- byte[] mem= new byte[10000];
- //l'écriture
- while ((count = zip.Read(mem, 0, 10000)) > 0){
- stream.Write(mem, 0, count);
- }
- stream.Seek(0, SeekOrigin.Begin);
- LoadConfigFromStream(stream);
- }
- }catch(Exception e){
- Console.WriteLine(e.Message);
- }
- }
- zip.Close();
- }
-
- /// <summary>
- /// Permet de charger la config depuis un flux.
- /// </summary>
- /// <param name="stream">Le flux en question.</param>
- private void LoadConfigFromStream(Stream stream){
- IFormatter formatter = new BinaryFormatter();
- PropertySaver = (PropertyAndValueList) formatter.Deserialize(stream);
- ApplyProperties();
- }
-
- /// <summary>
- /// Permet d'appliquer les différentes propriétés à l'objet
- /// </summary>
- private void ApplyProperties(){
- PropertyInfo []properties = m_Ctrl.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);
-
- foreach(PropertyInfo p in properties){
- if(p.CanRead && p.CanWrite){
- Object val = p.GetValue(m_Ctrl, null);
-
- if(val != null){
- if(p.PropertyType.IsSerializable){
- PropertyAndValue prop = PropertySaver.GetPropertyAndValue(p.Name);
- if(prop != null){
- p.SetValue(m_Ctrl, prop.PropertyValue, null);
- }
- }
- }
- }
- }
- }
-
- /// <summary>
- /// Sauvegarde les différentes propriétés de l'objet, pour peu quelles soient
- /// accessibles en lecture et en écriture, et sérialisable.
- /// Le fichier de sérialisation est aussi zippé.
- /// </summary>
- public void Save(string FileName){
- if(m_Ctrl == null) return;
-
- PropertySaver.Clear();
-
- // Récupération des propriétés accessibles en lecture/ecriture, et qui sont sérialisables.
-
- PropertyInfo []properties = m_Ctrl.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);
-
- foreach(PropertyInfo p in properties){
- if(p.CanRead && p.CanWrite){
- Object val = p.GetValue(m_Ctrl, null);
-
- if(val != null){
- if(p.PropertyType.IsSerializable){
- PropertySaver.Add(new PropertyAndValue(p.Name, val));
- }
- }
- }
- }
-
- // Sauvegarde des propriétés
- MemoryStream myStream = new System.IO.MemoryStream();
- IFormatter formatter = new BinaryFormatter();
- formatter.Serialize(myStream, PropertySaver);
-
- // Création d'un fichier zip contenant les propriétés
- ZipEntry MyZipEntry = new ZipEntry("conf");
- ZipOutputStream MyZipOutputStream = new ZipOutputStream((File.Create(FileName)));
- MyZipOutputStream.PutNextEntry(MyZipEntry);
- byte[] buffer = new byte[4096];
- myStream.Seek(0, SeekOrigin.Begin);
- int count = myStream.Read(buffer, 0, 4096);
- while (count > 0){
- MyZipOutputStream.Write(buffer, 0, count);
- count = myStream.Read(buffer, 0, 4096);
- }
- myStream.Close();
- MyZipOutputStream.Close();
- }
- }
-
- [Serializable]
- public class PropertyAndValue{
- /// <summary>
- /// Classe permettant de stocker une propriété avec son nom et sa valeur.
- /// </summary>
- private string m_PropertyName = String.Empty;
- public string PropertyName{
- set{m_PropertyName = value;}
- get{return m_PropertyName;}
- }
-
- private Object m_PropertyValue = null;
- public Object PropertyValue{
- set{m_PropertyValue = value;}
- get{return m_PropertyValue;}
- }
-
- public PropertyAndValue(string PropertyName, Object PropertyValue){
- m_PropertyName = PropertyName;
- m_PropertyValue = PropertyValue;
- }
- }
-
- [Serializable]
- public class PropertyAndValueList : CollectionBase{
- /// <summary>
- /// Classe permettant de stocker plusieurs propriétés.
- /// </summary>
- public void Add(PropertyAndValue p){
- List.Add(p);
- }
-
- public PropertyAndValue GetPropertyAndValue(string propertyName){
- foreach(PropertyAndValue p in List){
- if(p.PropertyName == propertyName){
- return p;
- }
- }
- return null;
- }
- }
- }
/*
* Created by SharpDevelop.
* User: Yo
* Date: 03/12/2004
* Time: 22:51
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Reflection;
using System.Collections;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using ICSharpCode.SharpZipLib.Zip;
namespace PropertiesKeeperNS{
/// <summary>
/// Permet de stocker et restaurer les propriétés d'un objet, quel qu'il soit. Les propriétés
/// chargées et sauvegardées doivent être accessibles en lecture/écriture, et doivent être
/// sérialisables.
/// </summary>
public class PropertiesKeeper : System.Windows.Forms.Control{
private PropertyAndValueList PropertySaver = new PropertyAndValueList();
private Control m_Ctrl = null;
public Control Ctrl{
set{m_Ctrl = value;}
get{return m_Ctrl;}
}
public PropertiesKeeper(){
}
/// <summary>
/// Permet de charger le fichier de configuration.
/// </summary>
/// <param name="FileName">Le nom du fichier à charger.</param>
public void Load(string FileName){
if(m_Ctrl == null) return;
ZipInputStream zip = new ZipInputStream(new FileStream(FileName,FileMode.Open,FileAccess.Read));
ZipEntry zip_entry;
while((zip_entry = zip.GetNextEntry())!=null){
try{
if(zip_entry.Name == "conf"){
MemoryStream stream = new MemoryStream();
int count;
byte[] mem= new byte[10000];
//l'écriture
while ((count = zip.Read(mem, 0, 10000)) > 0){
stream.Write(mem, 0, count);
}
stream.Seek(0, SeekOrigin.Begin);
LoadConfigFromStream(stream);
}
}catch(Exception e){
Console.WriteLine(e.Message);
}
}
zip.Close();
}
/// <summary>
/// Permet de charger la config depuis un flux.
/// </summary>
/// <param name="stream">Le flux en question.</param>
private void LoadConfigFromStream(Stream stream){
IFormatter formatter = new BinaryFormatter();
PropertySaver = (PropertyAndValueList) formatter.Deserialize(stream);
ApplyProperties();
}
/// <summary>
/// Permet d'appliquer les différentes propriétés à l'objet
/// </summary>
private void ApplyProperties(){
PropertyInfo []properties = m_Ctrl.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);
foreach(PropertyInfo p in properties){
if(p.CanRead && p.CanWrite){
Object val = p.GetValue(m_Ctrl, null);
if(val != null){
if(p.PropertyType.IsSerializable){
PropertyAndValue prop = PropertySaver.GetPropertyAndValue(p.Name);
if(prop != null){
p.SetValue(m_Ctrl, prop.PropertyValue, null);
}
}
}
}
}
}
/// <summary>
/// Sauvegarde les différentes propriétés de l'objet, pour peu quelles soient
/// accessibles en lecture et en écriture, et sérialisable.
/// Le fichier de sérialisation est aussi zippé.
/// </summary>
public void Save(string FileName){
if(m_Ctrl == null) return;
PropertySaver.Clear();
// Récupération des propriétés accessibles en lecture/ecriture, et qui sont sérialisables.
PropertyInfo []properties = m_Ctrl.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance);
foreach(PropertyInfo p in properties){
if(p.CanRead && p.CanWrite){
Object val = p.GetValue(m_Ctrl, null);
if(val != null){
if(p.PropertyType.IsSerializable){
PropertySaver.Add(new PropertyAndValue(p.Name, val));
}
}
}
}
// Sauvegarde des propriétés
MemoryStream myStream = new System.IO.MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(myStream, PropertySaver);
// Création d'un fichier zip contenant les propriétés
ZipEntry MyZipEntry = new ZipEntry("conf");
ZipOutputStream MyZipOutputStream = new ZipOutputStream((File.Create(FileName)));
MyZipOutputStream.PutNextEntry(MyZipEntry);
byte[] buffer = new byte[4096];
myStream.Seek(0, SeekOrigin.Begin);
int count = myStream.Read(buffer, 0, 4096);
while (count > 0){
MyZipOutputStream.Write(buffer, 0, count);
count = myStream.Read(buffer, 0, 4096);
}
myStream.Close();
MyZipOutputStream.Close();
}
}
[Serializable]
public class PropertyAndValue{
/// <summary>
/// Classe permettant de stocker une propriété avec son nom et sa valeur.
/// </summary>
private string m_PropertyName = String.Empty;
public string PropertyName{
set{m_PropertyName = value;}
get{return m_PropertyName;}
}
private Object m_PropertyValue = null;
public Object PropertyValue{
set{m_PropertyValue = value;}
get{return m_PropertyValue;}
}
public PropertyAndValue(string PropertyName, Object PropertyValue){
m_PropertyName = PropertyName;
m_PropertyValue = PropertyValue;
}
}
[Serializable]
public class PropertyAndValueList : CollectionBase{
/// <summary>
/// Classe permettant de stocker plusieurs propriétés.
/// </summary>
public void Add(PropertyAndValue p){
List.Add(p);
}
public PropertyAndValue GetPropertyAndValue(string propertyName){
foreach(PropertyAndValue p in List){
if(p.PropertyName == propertyName){
return p;
}
}
return null;
}
}
}
Conclusion
Mes remerciements à Coq qui m'a un peu aidé. Il m'a mis sur une bonne piste pour la récupération des propriétés d'un objet.
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 04 décembre 2004 00:37:59 :
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
sauvegarde de variable [ par FaustVII ]
Faustje cherche a sauvegarder la valeur d' une variable apres l avoir modifier lors de l execution de mon programme est ce que quelqu un pourrai m exp
Implementer une interface COM existante dans un object .NET [ par FrancoisC ]
Bonjour,J'essaye d'implémenter une interface COM existantedans un object .NET (UserControl).Mais c'est interface n'est pas accessible par l'objet COM
Sauvegarde de multiple variable dans un .INI [ par CracK ]
J'aimerai savoir comment sauvegarder plusieurs variables dans un fichier .INI . ( Ecriture/Lecture )Merci , CracK
pb de variable non definie [ par kaiwoo ]
[STAThread] static void Main() { Application.Run(new Form1()); } private void textBox1_TextChanged(object sender, System.EventArgs e) { } pr
Probleme d'acces à une base Access [ par ja001net ]
Bonjour,Je fais un programme en C#.net utilisant une basse access, avec laquelle j'accède via un OleDbConnection un OleDbDataReader et un OleDbCommand
Sauvegarde Application MDI [ par inza ]
Comment enregistrer les modifications apportées à 2 DataGrid posés sur une Fiche Fille ?
Sauvegarde d'un variable [ par liliemumue ]
BonjourJe suis entrain de creer un petit logiciel qui imprime des recu , seulement chaque recu doit avoir un numéro différent.Donc je dois avoir un fi
pb verif répertoires [ par jdaviaud ]
Là je fais face à un pb dont je comprends pas la logique :Je récupère le nom du répertoire d'où s'execute mon prog :RepActuel = Directory.GetCurrentDi
Attachements outlook [ par Gabberzorus ]
Salut,Je voudrais utiliser cette méthode pour envoyer des mails avec attachements : Outlook.Attachments.Add(object Source, object Type, object Positio
HELP CONVERT OBJECT [ par sg_kan ]
Salut est ce que quelqu'un pourrez m'aidez et me dire commment fair eun cast en c# de object en DropDownList ou en CheckBox ou en TextBox..En VB ca d
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|