IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Méthodes pour mémoriser des paramètres utilisateurs


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 773
    Points : 275
    Points
    275
    Par défaut Méthodes pour mémoriser des paramètres utilisateurs
    Bonjour,
    Pour stocker des paramètres utilisateur, je connais 3 méthodes :
    - la base de registre,
    - le fichier .ini ou xml
    - la base de données.

    Je suis dans le cas de figure où les 3 méthodes sont a priori éligibles (même la dernière puisque mon appli s'appuie sur une base de données créée par l'utilisateur et donc propre à celui-ci)
    Comment classeriez-vous ces méhodes des plus rapides aux plus lentes (si un tel classement existe en théorie) ?
    Je pense qu'il faut examiner 2 sous-cas :
    a/ la lecture-écriture d'un paramètre se fait au coup par coup (avec ouverture/fermeture d'une connexion dans le cas 3 et création d'un noeud de registre puis fermeture de celui-ci dans le cas 1)
    b/ la lecture-écriture des paramètres se fait en masse au lancement-fermeture de l'appli et les paramètres sont stockés dans des variables publiques pendant toute la durée d'exécution de l'appli.

    La réponse dépend-elle du nombre de paramètres mémorisés ? Si oui, où situeriez-vous le seuil où le choix de la méthode peut basculer ?
    Dans mon cas, j'ai environ 130 paramètres.

    Dernière question : pour la solution 2, j'ai vu comment faire pour un fichier INI grâce à ce topic, mais vaut-il mieux utiliser un fichier XML ? A priori, dans les tutos, je n'ai pas trouvé un éventuel avantage par rapport à la méthode du fichier INI. Ca me semble même plus compliqué.

    Merci d'avance de votre partage d'expérience.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    130 paramètres, même à 1ko le paramètre (large) ca fait 130ko donc moins de 10ms à lire/sauvegarder, donc la question de performance ne se pose pas

    c'est donc subjectif, et moi je dirais
    bdr < 30 params
    fichier < 30 Mo
    bdd à partir de 5Mo si besoin de performance et si la taille grossit dans le temps, si la taille ne change pas la bdd n'amène pas grand chose


    après il y a plusieurs méthodes pour les fichiers, ca dépend surtout comment c'est rangé dans ton code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    Pour la gestion des paramètres via le fichier de config (xml), tu penses que c'est plus compliqué que les fichiers .ini car tu as regardé comment on utilisait les fichiers xml.

    Ce que tu ignores, c'est que pour la gestion du fichier de config, .NET fait ça pour toi.

    Disons que tu as un paramètre pour stocker la couleur d'arrière plan d'un formulaire nommé FormBackColor (car l'utilisateur peut la modifier selon ses goûts), cela donnerait ceci :
    Lecture:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim formBackColor as Drawing.Color = My.Settings.FormBackColor
    Ecriture (après modification de la valeur de la variable):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    My.Settings.FormBackColor = formBackColor
    My.Settings.Save
    Ces instructions vont lire et écrire dans le fichier de config sans avoir besoin d'utiliser toute la plomberie de manipulation des fichiers xml.

    Je pense qu'on peut difficilement faire plus simple

    EDIT : Par contre, à ma connaissance, il faut avoir créer une entrée pour chaque paramètre au préalable en mode design (propriétés du projet > Paramètres). Je n'ai pas trouvé comment en ajoutant un nouveau au runtime (mais je n'ai pas vraiment chercher car jamais eu besoin).
    Kropernic

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    sans avoir besoin d'utiliser toute la plomberie de manipulation des fichiers xml
    rien de compliqué quand on connait les bonnes classes

    si tu as une classe du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class params ' avec un singleton dessus
      public property param1 as string
      public property param2 as integer
    end class
    tu peux faire une méthode save qui fait 2 lignes de code avec l'xmlserializer ca se débrouille et il n'y a pas besoin de comprendre l'xml
    et 2 lignes aussi pour la lecture du fichier qui recréé l'instance
    sinon il y a le binaryformatter aussi pour faire ca en binaire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Tout dépends de quelle manière est agencé ton code mais je ne suis pas d'accords sur ton point b) il n'est pas necessaire de charger des paramètres en masse dès lors non utilisés à l'instant "T".

    --> BDD : je rejoins pol63 sur le fait que si tu souhaites stocker des paramètres dans une bdd qu'il faille que cette dernière soit grandissante sur la durée, sinon aucune plus-value....
    --> BDR : nécessite que l'application démarre avec certaines autorisation selon le type de compte de l'utilisateur.
    --> INI : sont limités quant à leur taille 64ko (par section.....me rappel plus exactement......). Javais lu ca qqpart jadis.
    --> My.settings : change de répertoire de destination d'enregistrement lorsque la version du programme change.


    --> XML : Perso j'utilise du xml depuis des lustres grace a cette librairie : http://www.codeproject.com/Articles/...simple-at-last
    Si tu as besoin d'exemples particuliers n'hésites pas à demander même si de ce côté la page est plutôt bien fournie

    ++

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    rien de compliqué quand on connait les bonnes classes

    si tu as une classe du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class params ' avec un singleton dessus
      public property param1 as string
      public property param2 as integer
    end class
    tu peux faire une méthode save qui fait 2 lignes de code avec l'xmlserializer ca se débrouille et il n'y a pas besoin de comprendre l'xml
    et 2 lignes aussi pour la lecture du fichier qui recréé l'instance
    sinon il y a le binaryformatter aussi pour faire ca en binaire
    Je testerai ça à l'occasion !
    Kropernic

  7. #7
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 773
    Points : 275
    Points
    275
    Par défaut
    Merci à tous pour cette avalanche d'idées intéressantes

    My.settings : change de répertoire de destination d'enregistrement lorsque la version du programme change.
    Je n'ai pas bien compris ! Peux-tu préciser ? Je suppose que tu fais allusion à la méthode proposée par Kropernic ? J'étais assez tenté pour tester cette méthode vu sa simplicité et sa pertinence supposée pour le peu de paramètres de mon appli.
    Je suppose que la méthode de Kropernic est équivalente à celle du tuto de P. Lasserre (celle de Kropernic étant la version "code" et celle de Lasserre la version "designer") ?
    J'ai oublié de citer cette méthode en effet parce que j'ai essayé de la mettre en oeuvre hier en suivant le tuto avec l'exemple d'une case à cocher. J'ai beau changer son état, la valeur de la clé n'est pas modifiée dans le .config. Tout ça pour dire que je n'ai pas compris comment et dans quel fichier les paramètres sont enregistrés en cas de modification.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,
    Citation Envoyé par Kropernic Voir le message
    Je testerai ça à l'occasion !
    Un exemple ici, mais c'est avec un fichier complexe, avec une seule classe, c'est encore plus simple.
    La lecture se fait en une seule ligne (voir partie : La lecture du fichier)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Return (New Xml.Serialization.XmlSerializer(GetType(DataBatchSaisie))).Deserialize(objStreamReader)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    @noftal :

    En fait my.settings enregistre et mets à jour 1 fichier situé dans 1 repertoire généré selon le numéro (+ genre de hachage) de version de l'appli dans %appdata%....
    Désolé pas plus de précisions ou d exemples car ca fait qq jours que je n'ai plus mon PC : vacances familles obligent ...

    Donc ce qui veut dire que lorsque tu changes de version de 1.0.0.0 à 1.1.0.0 par exemple que l'appli ne peut plus pointer le précédent fichier de config !

    Faut tester pour se rendre compte

  10. #10
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 773
    Points : 275
    Points
    275
    Par défaut
    Ah oui, c'est balot ça Bon, ben je laisse tomber cette solution. Ca me semblait trop facile aussi.

    Donc je récapitule ce qui s'est dit (ou ce que j'en ai compris, merci de corriger le cas échéant) :
    - Il n'est pas plus pénalisant de traiter les lectures/écritures de paramètres lorsqu'on en a vraiment besoin que de le faire en masse
    - Le choix de la méthode dépend du nombre de paramètres avec dans l'ordre BdR (30 paramètres), Bdd (<5Mo), fichier INI ou XML (<30Mo)
    - Dans mon cas 130 paramètres, j'ai le choix des armes.

    Je vais explorer le lien très intéressant de wallace1 sur les XML.
    Je crois comprendre que l'un des avantages du XML par rapport au INI est que l'on peut multiplier les niveaux et sous-niveaux de paramètres alors que, en INI, il n'y a que les sections puis les paramètres.

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Je déconseillerai la BDR, a force de placer des éléments dedans cela fini par ralentir le système.
    Bon pour 130 paramètres cela ne change pas grand chose (alors que certains programmes en mettent des centaines voire plus)

    Les ini ne sont plus beaucoup utilisés.

    Les xml sont pratiques, mais facilement accessible à l'utilisateur.

    La base de données, puisque tu en as une, autant l'utiliser.

    Mais ce n'est que mon avis
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  12. #12
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 773
    Points : 275
    Points
    275
    Par défaut
    Merci pour ton commentaire.
    Concernant la BdD, je suis en fait obligé d'utiliser une autre solution pour certains paramètres.
    En effet, certains paramètres d'initialisation doivent être lus avant l'accès à la base de données. Il n'y en a pas beaucoup, certes, mais quand même.
    Le meilleur exemple est justement le paramètre qui stocke le chemin d'accès à la BdD pour pouvoir s'y connecter (excellente, la transition avec notre autre discussion en cours sur ce sujet )
    Dans mon appli, actuellement, je stocke moins d'une dizaine de paramètres dans la BdR et tous les autres, les plus nombreux, dans la BdD.
    Dans les 2 cas ces paramètres sont propres à l'utilisateur : la BdD stocke le nom de l'utilisateur Windows en même temps que le nom du paramètre et sa valeur; et les paramètres de la BdR sont stockés dans HKCU/...
    Je trouverais ça quand même plus élégant de regrouper tous ces paramètres dans un unique fichier.
    J'avoue d'ailleurs que j'ai du mal à me convaincre que le temps d'accès en lecture/écriture soit équivalent entre la solution fichier (INI ou XML) et BdD. Mais bon, si vous le dites...
    En plus, plus je lis mon code, et plus je trouve lourd d'avoir à écrire 3 ou 4 lignes pour lire ou écrire un paramètre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    déclarer un nouveau noeud de la BdR
    node.GetValue ou SetValue
    node.close
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ouvrir la connexion à la DB avec connectionString 
    Ecrire ou lire dans la BdD
    Fermer la connexion

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par noftal Voir le message
    Concernant la BdD, je suis en fait obligé d'utiliser une autre solution pour certains paramètres.
    En effet, certains paramètres d'initialisation doivent être lus avant l'accès à la base de données. Il n'y en a pas beaucoup, certes, mais quand même.
    Tout à fait.
    C'est juste des idées, après tu vois en fonction de tes besoins.

    Citation Envoyé par noftal Voir le message
    En plus, plus je lis mon code, et plus je trouve lourd d'avoir à écrire 3 ou 4 lignes pour lire ou écrire un paramètre :
    Quelle que soit la façon dont tu procédes, tu crés des méthodes (avec paramètres id et valeur) qui effectuent les manips, et ensuite tu n'as plus qu'une ligne à écrire.
    MaMéthodeEnregParam(id,valeur)
    ,
    MaMéthodeLitParam(id,valeur)
    et
    MaMethodeCreParam(id,valeurdefaut)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    @noftal :

    En fait my.settings enregistre et mets à jour 1 fichier situé dans 1 repertoire généré selon le numéro (+ genre de hachage) de version de l'appli dans %appdata%....
    Désolé pas plus de précisions ou d exemples car ca fait qq jours que je n'ai plus mon PC : vacances familles obligent ...

    Donc ce qui veut dire que lorsque tu changes de version de 1.0.0.0 à 1.1.0.0 par exemple que l'appli ne peut plus pointer le précédent fichier de config !

    Faut tester pour se rendre compte
    Il me semble que c'est %userprofile%\AppData\Local\ ...
    Mais je ne connais pas trop le principe d'utilisation.
    S'il n'existe pas il le génére au premier lancement de l'appli.

    Par contre il ne contient que les données de portée "User", pas ceux de portée "application" (la chaîne de connexion a une portée application)

    Pour connaître les fichiers par progr
    le fichier de config dans le répertoire de l'exe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            Label1.Text = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None).FilePath
    Le fichier de config user %userprofile%\AppData\Local\
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Label11.Text = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath
            Label2.Text = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming).FilePath
    Mais je ne connais pas le principe de fonctionnement détaillé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  15. #15
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 773
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par rv26t Voir le message

    Quelle que soit la façon dont tu procédes, tu crés des méthodes (avec paramètres id et valeur) qui effectuent les manips, et ensuite tu n'as plus qu'une ligne à écrire.
    C'est pas faux (c'est même très vrai). En fait, avant ce topic, j'étais tellement persuadé que la ligne 1 (ouverture) et la ligne 3 (fermeture) étaient consommateurs de temps, que je préférais ne pas créer de méthode et les répéter quand nécessaire, en regroupant du coup les lectures/écritures de plusieurs paramètres.
    Par exemple, au lieu d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' Corps de la procédure 
    valeur1 = MaMéthodeLitParam(id1)
    valeur2 = MaMéthodeLitParam(id2)
    ...
    'Fonction utile
    Private function MaMéthodeLitParam(id) as string
    Dim nodeReg as Registry... = CreateSubKey....
    valeur = nodeReg.GetValue(id)
    nodeReg.close
    Return valeur
    End Function
    J'écrivais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    'Corps de ma procédure
    Dim nodeReg as Registry... = CreateSubKey....
    valeur1 = nodeReg.GetValue(id1)
    valeur2 = nodeReg.GetValue(id2)
    nodeReg.close

  16. #16
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 773
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    --> XML : Perso j'utilise du xml depuis des lustres grace a cette librairie : http://www.codeproject.com/Articles/...simple-at-last
    Si tu as besoin d'exemples particuliers n'hésites pas à demander même si de ce côté la page est plutôt bien fournie

    ++
    Ben je veux bien un exemple de lecture / écriture avec cette classe, par ce que je ne m'en sors pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim xcfg As New Xmlconfig(PATH_XML, True)
            xcfg.Settings("windows")("width").intValue = 800
            xcfg.Settings("saveonclose").boolValue = True
            xcfg.Settings("listbox")("item1")("name").Value = "foo"
    Le code précédent reste sans effet chez moi (à part la création du fichier vierge XML) et le suivant n'est pas accepté parce que newplugin.item est en readonly d'après mon IDE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim newplugin As ConfigSetting = xcfg.Settings("plugin#1")
            newplugin("name") = "test"

  17. #17
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Comme mentionné ultérieurement je suis en vacances en famille donc pas de PC, j'écris ac mon samsung et autan5 dire que les zones de copier/coller sont pas tres precises depuis mon bitbucket.....brefff pour illustrer j'utilise le projet private de mon bitbucket duquel j'utilise cette librairie vakosXml :

    Télecharges mon binaire pour voir la constitution du fichier "ImaboxUploader-settings.xml" :
    Http://wallace87000.upd.fr/ImaboxUploader.exe

    Donc je declare dans ma procedure Main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim xcfg As New Cls_Xmlconfig(Application.StartupPath & "\ImaboxUploader\ImaboxUploader-Settings.xml", True)
    Je definie des valeurs par defaut à mes paramétres pour eviter de tester plus tard si elles sont nulles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    SetDefaultXmlValue(xcfg)
     
    Friend Shared Sub SetDefaultXmlValue(ByVal xcfg As Cls_Xmlconfig)
                Cls_Settings.CreateAppDir()
                xcfg.Settings("ApplicationSettings")("StartupPath").Value = Application.ExecutablePath
                'General Tab
                If xcfg.Settings("Options")("General")("CaptureExtension").Value = Nothing Then
                    xcfg.Settings("Options")("General")("CaptureExtension").Value = ".png"
                End If
                If xcfg.Settings("Options")("General")("JpegCompression").intValue = Nothing Then
                    xcfg.Settings("Options")("General")("JpegCompression").intValue = 100
                End If
                If xcfg.Settings("Options")("General")("HotKey1").intValue = Nothing Then
                    xcfg.Settings("Options")("General")("HotKey1").intValue = 4
                End If
                If xcfg.Settings("Options")("General")("HotKey2").intValue = Nothing Then
                    xcfg.Settings("Options")("General")("HotKey2").intValue = 44
                End If
                If xcfg.Settings("Options")("General")("ActiveWindow").boolValue = Nothing Then
                    xcfg.Settings("Options")("General")("ActiveWindow").boolValue = False
                End If
                If xcfg.Settings("Options")("General")("AfterCapture").Value = Nothing Then
                    xcfg.Settings("Options")("General")("AfterCapture").boolValue = False
                End If
                If xcfg.Settings("Options")("General")("RightClic").Value = Nothing Then
                    xcfg.Settings("Options")("General")("RightClic").boolValue = False
                End If
                If xcfg.Settings("Options")("General")("File").boolValue = True Then Cls_RightClic.CreateUploadRightClic() Else Cls_RightClic.DeleteUploadRightClic()
                'Hosting Tab
                If xcfg.Settings("Options")("Hosting")("BBCode").Value = "" Then
                    xcfg.Settings("Options")("Hosting")("BBCode").Value = "Aucune"
                End If
                If xcfg.Settings("Options")("Hosting")("UrlShortener").boolValue = Nothing Then
                    xcfg.Settings("Options")("Hosting")("UrlShortener").boolValue = False
                End If
                If xcfg.Settings("Options")("Hosting")("NonAnonymous").Value = Nothing Then
                    xcfg.Settings("Options")("Hosting")("NonAnonymous").boolValue = False
                End If
                'Image Tab
                If xcfg.Settings("Options")("Picture")("EditApp").Value = "" Then
                    xcfg.Settings("Options")("Picture")("EditApp").Value = My.Application.GetEnvironmentVariable("WINDIR") & "\System32\mspaint.exe"
                End If
                'Others
                If xcfg.Settings("Options")("History")("Filter").Value = Nothing Then
                    xcfg.Settings("Options")("History")("Filter").intValue = 0
                End If
                If xcfg.Settings("Options")("History")("Sorter").intValue = Nothing Then
                    xcfg.Settings("Options")("History")("Sorter").intValue = 2
                End If
     
                xcfg.Save(Application.StartupPath & "\ImaboxUploader\ImaboxUploader-Settings.xml")
            End Sub
    Voilà qui illustrait la lecture et l'ecriture.

    Pour ce qui est de la création dynamique de noeuds. Je prends toujours l'exemple de mon projet dans lequel je cree un historique ds le fichier "imaboxUploader-History.xml" :

    A chaque upload d'image je crée un noeud qui se nomme : UploadedFile dans lequel j'enregistre le lien retourné, sa date, son nom....etc.....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CreateHistoryEntry(FilePath$, Url$)
                Dim xcfgHistory0 As New Cls_Xmlconfig(Application.StartupPath & "\ImaboxUploader\ImaboxUploader-History.xml", True)
                Dim newplugin As Cls_ConfigSetting
                newplugin = xcfgHistory0.Settings("UploadedFile##")
                newplugin("Date").Value = Format(Date.Now, "yyyy/MM/dd")
                newplugin("Name").Value = New FileInfo(FilePath).Name
                newplugin("Link").Value = Url
                newplugin("Icon").Value = Convert.ToBase64String(Cls_imageHelper.IconToBytes(System.Drawing.Icon.ExtractAssociatedIcon(FilePath)))
                xcfgHistory0.Save(Application.StartupPath & "\ImaboxUploader\ImaboxUploader-History.xml")
            End Sub
    Voilà et désolé je ne peux pas être plus clair ---> ayant peu de tps, pas de PC et d'EDI sous la main....

    A+

  18. #18
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    @Wallace1 : Bonne vacances

    @noftal
    Et les settings avec fichiers de config ? (j'avais oublié dans mon post) comme l'indique Kropernic dans son post, c'est très simple.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  19. #19
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    773
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 773
    Points : 275
    Points
    275
    Par défaut
    @wallace1 : pas de souci. Je ne suis pas pressé, prends ton temps, profite de tes vacances. Avec tout ce matériau, il va me falloir du temps pour tester

    @rv26t : comme je l'ai indiqué plus haut, le fait que les settings soient enregistrés dans un répertoire qui dépend de la version est rédhibitoire pour moi.
    J'ai vu ta réponse sur l'autre sujet.De même, il va me falloir un peu de temps pour tester. Ne t'étonne pas si je ne reviens pas tout de suite vers toi.

  20. #20
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par noftal Voir le message
    @rv26t : comme je l'ai indiqué plus haut, le fait que les settings soient enregistrés dans un répertoire qui dépend de la version est rédhibitoire pour moi
    Au vue du commentaire de rv26t ta chaine de connexion fait partie d'1 setting de portee application et non user :

    Par contre il ne contient que les données de portée "User", pas ceux de portée "application" (la chaîne de connexion a une portée application)
    A tester effectivement

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Meilleure méthode pour faire des coins arrondis
    Par kodokan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 17/09/2006, 15h08
  2. Réponses: 1
    Dernier message: 06/09/2006, 18h11
  3. Réponses: 5
    Dernier message: 17/08/2006, 10h10
  4. Méthode pour traiter des commandes
    Par Kr00pS dans le forum C
    Réponses: 17
    Dernier message: 15/06/2006, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo