begin process at 2008 08 22 05:02:05
1 229 775 membres
46 nouveaux aujourd'hui
14 267 membres club

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é: 8 692 / 717

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

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
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

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.
  • 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

Pub



Appels d'offres

CalendriCode