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 !

LOGICIEL DE SAUVEGARDE DES CONNAISSANCES


Information sur la source

Catégorie :Applications Source .NET ( DotNet ) Classé sous : sauvegarde, code Niveau : Initié Date de création : 22/02/2005 Date de mise à jour : 26/02/2005 12:16:07 Vu / téléchargé: 9 570 / 767

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (23)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
Ce petit programme permet de sauvegarder des portions de code ou diverses infos utiles, bref, des connaissances. Ceci est un programme pour mon usage perso, mais le code peut vous être utile pour apprendre certaines techniques dont :
- la sérialisation,
- La création de composants (avec propriétés, évènements...)
- L'utilisation du contrôle richtext,
- L'utilisation du propertygrid,
- L'association de votre programme à un type de fichier,
- L'utilisation de NSIS pour créer un installeur.

Le zip contient le code source, ainsi qu'un script NSIS destiné à créer un installeur. Il y a aussi l'installeur en question, ainsi qu'un fichier de test nommé "Test du logiciel.kdb". Lorsque vous aurez installé et lancé une promière fois le logiciel, l'association de fichiers de type kdb se fera avec le logiciel, ce qui vous premettra d'ouvrir un fichier kdb avec le programme simplement en double-cliquant dessus.
 

Source

  • Tout est dans le zip.
Tout est dans le zip.

Conclusion

Code écrit avec Visual C# Express.
Utilise le Framework v2
 

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

22 février 2005 13:07:13 :
23 février 2005 16:04:29 :
Plusieurs fonctionnalités ont été ajoutées dans cette nouvelle version. Tout d'abord, il est maintenant possible de faire du drag and drop le contrôle treeview. Le logiciel ne propose plus de sauvegarder s'il n'y a eu aucun changement, et il y a aussi une nouvelle fonction d'import export des connaissances. En d'autres termes, on sélectionne un dossier, puis on fait exporter. Ca génère un fichier ou on veut sur le disque dur. Ce fichier peut être ouvert en double cliquant dessus, ou il peut aussi être importé dans un autre fichier de bases de connaissances. Pour ce qui est du code, il n'est pas encore commenté. Je sais que le but de ce site est de proposer des infos les uns envers les autres, mais je n'ai pas eu le temps d'insérer les commentaires pour l'instant... celà fera l'objet d'une prochaine mise à jour. Alors si quelque chose vous interesse dans cette application, il va falloir soit regarder le code directement, soit me demander pour un peu d'aide. Voila :)
26 février 2005 12:16:07 :
Dans cette nouvelle version, j'ai ajouté les commentaires au code, pris compte des remarques de Xya, et ajouté une nouvelle fonctionnalité : la liste des fichiers récents.

Commentaires et avis

signaler à un administrateur
Commentaire de Bidou le 22/02/2005 13:02:25 administrateur CS

Euh, quelqu'un voit un zip ???

signaler à un administrateur
Commentaire de yoannd le 22/02/2005 13:04:19

Autant pour moi

signaler à un administrateur
Commentaire de yoannd le 23/02/2005 16:05:50

Le zip a été rajouté ;)

signaler à un administrateur
Commentaire de tmcuh le 23/02/2005 16:18:20

sans ouvrir le zip 10 rien que pour le principe. Vraiment une bonne idée.

signaler à un administrateur
Commentaire de yoannd le 23/02/2005 16:19:40

WOW ! Merci ;-)

signaler à un administrateur
Commentaire de Xya le 25/02/2005 01:06:19

Honnêtement l'idée est bonne mais le code présenté sur la capture (et qu'on retrouve dans ta source) n'est pas top:

-dans Serialize et Deserialize tu ouvres ou tu crées un fichier et tu ne le fermes pas de façon sûre (try ... finally ou using), si une exception est levée à la ligne avant l'appel à Close le fichier ne sera pas fermé
-toujours dans ces mêmes fonctions tu affiches le message d'erreur dans la console alors que c'est un programme WinForms, je vois pas l'intérêt...
-à chaque sérialisation/désérialisation tu crées un nouvel BinaryFormatter, alors que tu pourrais le créer dans le constructeur de ta classe et économiser des ressources après plusieurs appels -ou-
-si l'objet ne sert que pour une seule sérialisation, rendre les deux fonctions staiques et rajouter un argument (obj à la place du champ m_Obj)
-tu mets des attributs inutiles puisqu'ils se 'contredisent':

        [DefaultValue(typeof(Object), ""),
        CategoryAttribute("Object Type"),
        DescriptionAttribute("Defines the object's type."),
        Browsable(false)]

le 2eme et le 3eme décrivent la propriété si elle est affichée dans un éditeur (PropertyGrid) et le 4eme indique qu'il ne faut pas l'afficher...
-autre part dans ton code, dans ShellExtension, dans SetupKeys tu ne fermes aucune clée de registre que tu ouvres, ça fait peur à voir...
-quelque part au hasard dans TextEditor

            KnownColor enumColor = new KnownColor();
            Array Colors = Enum.GetValues(enumColor.GetType());

ce serait plus simple de faire
            Array Colors = Enum.GetValues(typeof(KnownColor));

Enfin voilà, il reste quelques petites choses à améliorer dans ton code même si l'idée reste géniale.

signaler à un administrateur
Commentaire de yoannd le 25/02/2005 10:19:43

Salut Xya,

En effet, certaines choses sont à revoir dans mon code et je te remercie autant pour tes informations, que pour avoir pris le temps de regarder le code.
J'ai cependant quelques trucs à rajouter... prennons points par points.

1 -dans Serialize et Deserialize tu ouvres ou tu crées un fichier et tu ne le fermes pas de façon sûre (try ... finally ou using), si une exception est levée à la ligne avant l'appel à Close le fichier ne sera pas fermé
--> Très juste, je corrige la chose de suite, et j'essaye une autre méthode.

2 -toujours dans ces mêmes fonctions tu affiches le message d'erreur dans la console alors que c'est un programme WinForms, je vois pas l'intérêt...
L'intérêt est en fait pour le développement du logiciel. Je préfère mettre mon programme en mode console lorsque je développe, et ainsi récupérer les erreurs par le biais de la console. Une fois le logiciel "terminé" (ou du moins mis à disposition des utilisateurs), je le remet en winform simple. Lorsqu'une erreur survient au chargement ou à l'enregistrement du fichier (par exemple), j'affiche un message à l'utilisateur par le biais d'une messagebox, mais je ne veux pas forcément que l'utilisateur soit perdu dans des informations de déboggage trop complexes... voila voila... :)


3 -à chaque sérialisation/désérialisation tu crées un nouvel BinaryFormatter, alors que tu pourrais le créer dans le constructeur de ta classe et économiser des ressources après plusieurs appels -ou-
-si l'objet ne sert que pour une seule sérialisation, rendre les deux fonctions staiques et rajouter un argument (obj à la place du champ m_Obj)

--> Très juste, je choisis la première solution. Par contre, il semble que l'objet BinaryFormatter n'ait pas de destructeur...

4 -tu mets des attributs inutiles puisqu'ils se 'contredisent':
        [DefaultValue(typeof(Object), ""),
        CategoryAttribute("Object Type"),
        DescriptionAttribute("Defines the object's type."),
        Browsable(false)]
--> Très juste aussi, mais il y a une raison. Il arrive que parfois, je choisisse de mettre browsable ou non certains
attributs... enfait, celà varie parfois de mon humeur ! lol. Mais la principale rainson, c'est que je me disais que Visual Studio devait certainement afficher les infos mises ici dans la completion du code (tu sais, l'espèce de petit tooltip text). Bref, je voulais tester ca, et en fait, j'ai du être dérangé pendant que j'écrivais le code, ou un truc dans le genre, ce qui fait que j'ai oublié de tester si Visual Studio affichait cette info dans l'éditeur de code. Et comme il ne le fait pas, ben forcément, ca sert à rien de mettre ce code... enfin bref...

5 - -autre part dans ton code, dans ShellExtension, dans SetupKeys tu ne fermes aucune clée de registre que tu ouvres, ça fait peur à voir...
---> Ce code a été pompé sur un site, je sais plus lequel... enfin ca ne m'excuse pas parceque j'aurais du voir l'erreur aussi... bref, je corrige.

6 -quelque part au hasard dans TextEditor

            KnownColor enumColor = new KnownColor();
            Array Colors = Enum.GetValues(enumColor.GetType());

ce serait plus simple de faire
            Array Colors = Enum.GetValues(typeof(KnownColor));
---> Mouis, en effet, c'est plus mieux, bien que ce soit pas non plus super grave.


Bref, je te remercie pour tes remarques qui contribue à faire de ce programme quelque chose d'un peu mieux.

Je posterai une mise à jour dans quelques temps pour corriger tout ca, et aussi pour apporter des commentaires à mon code.

Bye

Yoann

signaler à un administrateur
Commentaire de Xya le 25/02/2005 13:49:44

Salut Yoann,

j'ai juste deux petits commentaires pour tes commentaires:

2: C'est vrai que j'avais pas pensé à ça :) sinon avec Visual Studio 2003 le débogueur récupérait ce qu'on écrivait dans la console pour l'afficher dans la fenêtre de sortie, mais plus avec la version 2005 (beta 1 en tout cas), donc faut utiliser Debug pour faire la même chose, c'est dommage.

4: Pour les infos de complétion, on peut les mettre dans le code en rentrant /// devant la déclaration d'une classe, d'une méthode, d'un propriété, etc, et l'éditeur de code rajoute des balises XML qu'on a plus qu'à remplir, par ex:

/// <summary>
/// Représente un bloc de données.
/// </summary>
public struct DataBlock
(...)
        /// <summary>
/// Tableau d'octets contenant le bloc de données.
/// </summary>
public byte[] Data
{
            get
            {
                return data;
            }
        }
(...)
        /// <summary>
/// Lit des données depuis un flux et les copie dans le bloc.
/// </summary>
/// <param name="s"> Flux depuis lequel lire les données. </param>
/// <param name="dstOffset"> Offset du début des données à écrire dans le bloc. </param>
        /// <returns> Nombre d'octets lus. </returns>
        public int Read( Stream s, int dstOffset )

Voilà, voilà, j'espère que ces deux commentaires t'aideront un peu dans ton projet :)

Xya

signaler à un administrateur
Commentaire de yoannd le 25/02/2005 16:31:25

Merci pour les infos :)

Pour ce qui est des commentaires, le pire, c'est que je le savais, mais j'avais oublié ! lol
Bref, je suis en train d'ajouter mes commentaires au code, ce qui le rendra plus lisible, et je vais certainement ajouter une ou deux fonctions prochainement qui concerneront :
- La liste des fichiers récents
- La détection des modifications du fichier s'il est modifier en dehors du logiciel (tu sais, le genre de truc qui te dis "Le fichier a été modifié par un autre programme, voulez-vous le recharger ?")...
- La gestion des langues par l'intermédiaire des resources...
- L'enregistrement automatique (toutes les 5 minutes, par exemple).

Bref, je pense que je peux trouver pas mal d'idées pour faire de ce logiciel quelque chose de pas trop mal.

signaler à un administrateur
Commentaire de tmcuh le 15/03/2005 09:37:16

par contre j'ai parlé un peu trop vite... tu as fait ça en framework 2.0 :(

signaler à un administrateur
Commentaire de yoannd le 15/03/2005 09:46:38

Qu'es ce que tu reproches au framework 2.0 ?

signaler à un administrateur
Commentaire de tmcuh le 15/03/2005 19:50:42

qu'il n'est qu'en version béta, déjà chez microsoft la version final est pas toujours top, alors en béta :s ...

signaler à un administrateur
Commentaire de yoannd le 15/03/2005 22:10:25

hmmmmm... c'est pas très fondé, comme reproche. tu as des exemples de trucs qui ne fonctionent pas avec la beta 2 ?

Et d'ailleurs, le fait que ce soit compilé avec la v2.0 ne t'empèche pas de recompiler avec la version 1, si ca t'amuse. De plus, ça n'enlève aucunement de la qualité (ou de la non qualité) à mon code. Enfin bref, je suis pret à entendre tes arguments contre le framework 2, ca peut être interessant d'engager un débat là-dessus, même si je sais très bien que ca va finir comme d'habitude : les pro et les anti-microsoft... :)

signaler à un administrateur
Commentaire de tmcuh le 16/03/2005 17:22:42

lol non du tout de 1 ce n'est pas un forum et de 2 si il mette aux yeux de tout le monde la beta c'est qu'elle a des atouts en plus et ça je le nie pas, car il ne faut pas l'oublié c'est la première qui intègre la gestion du port com. Mais bon pour moi tout ce qui n'est pas en version final n'est pas fiable. Donc il faut éviter de programmer avec. Pour ce qui est de la recompilation bien sur qu'on peut toujours le faire et c'est meme ce que j'ai fait, juste dommage que le fichier projet marche pas chez moi :( faut tout faire à la main, mais bon comme tu dis ça n'enlève rien à la qualité de ton travail ;)

Amicalement tmcuh

signaler à un administrateur
Commentaire de yoannd le 16/03/2005 22:05:56

:)

En fait, tu as raison, la version beta doit certainement être incomplète et pas complètement testée non plus. Cependant, moi, j'adore tester des trucs, même si c'est pas une version finale. Les plus de la version 2 du framework sont à priori difficiles à détecter, à part si on lit la doc et plus précisément les "wat's new". On se rend compte des petits plus ajoutés comme les ports com, une meilleure gestion de la transparence des contrôles (enfin je crois)... tout un tas de petits détail quoi... Trouver ces petites différences par le fait du hasard me fait toujours un peu marrer ! lol. Non, plus sérieusement, j'ai fait ca avec le framework 2 aussi parceque c'est un logiciel créé pour apprendre (dans son concept, mais aussi dans le fait que je propose le code aux autres développeurs). Utiliser le framework pour un projet comme celui-ci, c'est un peu comme dire "hmmm, voyons ce que ce truc à dans le ventre".

Enfin voila... Au fait, désolé pour le ton de mon précédent post. J'avais aucunement l'intention d'être agressif, et pourtant, quand je relis le post, je trouve qu'il est pas très "tendre" ! lol... enfin bref, faut le lire sur le ton de la discution courtoise et distinguée (un peu à la Bernard Pivot, you see ?)

Tchao

signaler à un administrateur
Commentaire de Xya le 19/03/2005 12:28:30

>> Les plus de la version 2 du framework sont à priori difficiles à détecter

Honnêtement je ne compte plus les améliroations par apport au Framework v1.1 et Visual Studio 2005, et pourtant j'utiles qu'une petite partie du Framework (je fais pas ASP.NET, pas ADO.NET, pas de Remoting, pas de Web Services)

-les améliorations de C#: les génériques (qui justifient à eux seuls à mon avis le passage au Framework 2.0), la possibilité de ne pas avoir la même accessibilité pour 'get' et 'set' d'une propriété (plus de SetXXXInternal), les méthodes anonymes...
-grâce aux génériques et à EventHandler<T> on n'a plus à créer un délégué pour chaque type d'événement (même si on doit toujours créer l'EventArgs)
-les collections génériques plus performantes que les collections pour les types valeurs, on n'a plus à créer des collection personalisées tout le temps
-quand on ajoute un fichier à une ressource ResX, Visual Studio ne copie plus le contenu du fichier en Base64 dedans mais spécifie un lien vers le fichier spécifié (moins de gâchis d'espace pour les ressources)
-générations de wrappers pour les ressources
-les classes statiques
-compression GZip et Deflate (Zip)
-gestion des permissions Windows avec les ACLs (pas essayé mais ca a l'air super puissant et beaucoup plus simple que les API de Windows)
-String.IsNullOrEmpty
-[Type scalaire].TryParse
-on peut lancer un thread avec un paramètre avec ParameterizedThreadStart
-une classe StopWatch qui permet de faire des mesures de performances très précises (équivalent à QueryPerformanceCounter de Windows)
-tous les nouveaux contrôles WinForms (nouveaux menus, barre d'outils, un SplitContainer plus facile à utiliser, meilleure support des thèmes de Windows XP)
...

signaler à un administrateur
Commentaire de platinum07 le 03/10/2007 12:37:30

Bonjour yoannd !
l'application a l'air sympa mais plus trop compatible avec l'actuel Framework 2.0, très différent de la bêta (RaftingContainer, etc.. plus dispo). Je voudrais simplement savoir si tu as adapté, voire redéveloppé cette application avec le FW 2.0.
merci !

signaler à un administrateur
Commentaire de yoannd le 03/10/2007 14:20:03

Platinum07 -> Je dois pouvoir retrouver ça dans mes vieux cartons, effectivement. J'y regarderais dès que j'en aurais le temps et je posterais une nouvelle version.

signaler à un administrateur
Commentaire de platinum07 le 03/10/2007 15:56:34

bon pour info, je l'ai mis au "goût du jour", simplement en corrigeant les erreurs générées par VS.net 2005 sous le framework 2.0. Le RaftContainer ne faisant plus parti du FW(remplacé par les ToolStripContainer), j'ai retiré les morceaux de code y faisant référence et ai adapté la propriété Dick de chaque contrôle "majeur" pour que le rendu soit identique à ta version de départ.
Si tu mets ce projet de côté, je m'attelerais bien à la mise place d'un système de recherche par mots-clés et un affichage d'un ListView (nouveau panel dans le SplitContainer principal ?) afin profiter pleinement de l'outil. :)

signaler à un administrateur
Commentaire de platinum07 le 03/10/2007 15:58:02

ah ! peut-être voudrais-tu jeter un oeil ou repartir de ce que j'ai fait avec ta source..
si c'est le cas, fais moi signe ! ;)

signaler à un administrateur
Commentaire de yoannd le 03/10/2007 16:07:33

Re !

En fait, je pensais faire une évolution de l'outil en question. Je ne sais pas si tu as remarqué, mais le fait de mettre des lourdes images dans la zone de texte par le biais de copiers-coller fait que la sauvegarde et le chargement du fichier sont lents (sérialisation lente). J'ai un moyen de remédier à ça : faire un fichier zip qui contient une sérialisation de l'objet principal, ainsi que des rtf qui correspondent chacun à une connaissance. J'ai déjà testé la méthode ailleurs sans la mettre en place ici, et je sais faire. Une petite utilisation des références faibles pourrait d'ailleurs améliorer grandement l'outil (j'ai fait une source là dessus, si tu veux aller y jeter un coup d'oeuil).

Je m'y mets dans les heures/jours à venir.

signaler à un administrateur
Commentaire de platinum07 le 10/10/2007 13:28:13

salut !

du nouveau ?

signaler à un administrateur
Commentaire de yoannd le 10/10/2007 13:42:45

Salut,

Désolé, j'ai pas vraiment eu le temps de m'y remettre ces derniers jours. Je vais tenter de faire ça dès que possible !

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Executer du code C# [ par Skyride ] Bonjour à tousJ'espère que vous pourrez me renseigner...Je m'initie depuis quelques temps à l'environnement .NET et je commence un petit peu à m'inter 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 Les textures [ par NICKO02 ] Pour ceux qui ont le SDK de DX9, je prend le tutorial 5.Voila j'essaies de creer une texture : Dans le fichier D3dtriangle.cs;Dans la classe GraphicsC Sauvegarde de multiple variable dans un .INI [ par CracK ] J'aimerai savoir comment sauvegarder plusieurs variables dans un fichier .INI . ( Ecriture/Lecture )Merci , CracK Quel est le meilleur moyen de gerer un buffer ... [ par Hawkmoon ] Bon voila mon probleme : je connecte une socket sur un server irc mais avec le code suivant j'arrive pas a gerer les reponses du server dans un buffer Probleme DropDownList [ par jdaviaud ] J'ai un petit pb avec un dropdownlist.Quand je veux en récupérer la valeur de la ligne sélectionnée, j'utilise le code suivant :string famille = DropD array et CSharp [ par matgai ] Bonjour,Je débute en C# et je vois déjà les limites du tout-objet par rapport à C++. Voici en particulier où je bute :je veux écrire l'équivalent C++ problème de serialisation avec NetworkStream [ par Oberon ] J'aurais voulu sérialisé un objet en passant par un networkStream mais je bute sur un problème de casting...Coté serveur:BinaryFormatter formatter = n Datagrid : faire une colonne spéciale par le code behind [ par Felixlechat ] Bonjour, je sais comment ajouter une BoundColumn dans le code, et comment ajouter un ItemColumn dans la page (dans une datagrid), mais en revanche le Création d'un tableau dynamique HTML par le code... [ par pchanet ] Bonjour à tous,Je suis en train de développer la gestion d'une table HTML (type &lt;table&gt;...&lt;/table&gt;) en dynamique à partir de la page de co


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,702 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.