begin process at 2010 02 10 05:42:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > SAUVEGARDE/CHARGEMENT DE PROPRIÉTÉS D'UN OBJET

SAUVEGARDE/CHARGEMENT DE PROPRIÉTÉS D'UN OBJET


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Source .NET ( DotNet ) Classé sous :sauvegarde, charngement, object Niveau :Expert Date de création :04/12/2004 Date de mise à jour :04/12/2004 00:37:59 Vu / téléchargé :7 574 / 319

Auteur : yoannd

Ecrire un message privé
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


 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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • AssemblyInfo.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 099 octets
  • MainForm.confTélécharger ce fichier [Réservé aux membres club]2 086 octets
  • PropertiesKeeper.dllTélécharger ce fichier [Réservé aux membres club]10 240 octets
  • PropertiesKeeper.pdbTélécharger ce fichier [Réservé aux membres club]24 064 octets
  • PropertiesKeeperTestApp.exeTélécharger ce fichier [Réservé aux membres club]9 216 octets
  • PropertiesKeeperTestApp.exe.manifestTélécharger ce fichier [Réservé aux membres club]431 octets
  • PropertiesKeeperTestApp.pdbTélécharger ce fichier [Réservé aux membres club]13 824 octets
  • PropertiesKeeper.cmbxTélécharger ce fichier [Réservé aux membres club]945 octets
  • PropertiesKeeper.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier5 580 octets
  • PropertiesKeeper.prjxTélécharger ce fichier [Réservé aux membres club]2 846 octets
  • PropertiesKeeperTestApp.MainForm.resourcesTélécharger ce fichier [Réservé aux membres club]2 978 octets
  • AssemblyInfo.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier1 099 octets
  • MainForm.csTélécharger ce fichier [Réservé aux membres club]Voir ce fichier2 801 octets
  • PropertiesKeeperTestApp.cmbxTélécharger ce fichier [Réservé aux membres club]662 octets
  • PropertiesKeeperTestApp.MainForm.resourcesTélécharger ce fichier [Réservé aux membres club]3 842 octets
  • PropertiesKeeperTestApp.prjxTélécharger ce fichier [Réservé aux membres club]2 804 octets

Télécharger le zip


 Historique

04 décembre 2004 00:37:59 :

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) PIXEL SHADER - CRÉATION, UTILISATION, ET BINDING
Source avec Zip Source avec une capture Source .NET (Dotnet) CRÉATION ET ENVOI DE FICHIERS ZIPPÉS
Source avec Zip Source avec une capture Source .NET (Dotnet) LES RÉFÉRENCES FAIBLES
Source avec Zip Source .NET (Dotnet) EXTENSION DES LISTES GÉNÉRIQUES (DESIGN PATTERN "DECORATEUR"...
Source avec Zip Source avec une capture Source .NET (Dotnet) UN PEU DE 3D AVEC XAML ET BLENDER

 Sources de la même categorie

Source avec une capture TOOLTIP TEXT POUR LA LISTE DÉROULANTE D'UN COMBOBOX par whismeril
Source avec Zip Source avec une capture Source .NET (Dotnet) LOGIN (XML) par DanMor498
Source .NET (Dotnet) WEBTESTPLUGIN - IGNORER DES URLS LORS D'UN TEST WEB VISUAL S... par jesusonline
Source avec Zip Source avec une capture Source .NET (Dotnet) EXERCICE DE CALCUL MENTAL par Sat7121
Source avec Zip Source avec une capture Source .NET (Dotnet) TRADUCTEUR ALGO VISUAL BASIC .NET/C# par rhonin33

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) SAUVEGARDER DES DONNÉES SENSIBLES DANS LE FICHIER DE CONFIGU... par fcolo
Source avec Zip Source .NET (Dotnet) SAUVEGARDE DE CONFIGURATION PAR ISOLATEDSTORAGEFILE par kbumbazz
Source avec Zip Source avec une capture Source .NET (Dotnet) LOGICIEL DE SAUVEGARDE DES CONNAISSANCES par yoannd
Source avec Zip Source .NET (Dotnet) LOCALISATION DES PROPRIÉTÉS TYPE 'STRING' DES OBJETS par ppao
Source avec Zip Source avec une capture Source .NET (Dotnet) FAVORITESBACKUP par Cameleon69

Commentaires et avis

Commentaire de yfbf le 05/12/2004 16:27:54

le zip n'st pas complet

Commentaire de yoannd le 05/12/2004 18:56:09

Je viens de télécharger le zip associé à ma source pour vérifier, mais il me semble que rien ne manque. Par contre, ne recharche pas de fichiers spécifiques à Visual Studio, puisque comme je l'ai dit précédemment dans la description de la source, le tout à été fait avec SharpDevelop.

Commentaire de yoannd le 05/12/2004 18:57:23

Au fait, pour être sûr de ce que tu me dis, pourrais tu me dire ce qui te semble manquer ?

Commentaire de georgeduke le 26/08/2006 14:23:18

Code très sympatique et bien mieux que le mien qui était basé sur le même thème... grrrr lol Ca fait également plaisir de voir que tu as utilisé SharpDevelop ; c'est un très bon IDE, il faut le soutenir !! (la sharpdevelop2 est vraiment bien également)
Je vais essayer d'intégrer ta source à un de mes projets et te ferait un retour si il y a des choses intéressantes à dire ;-)

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales