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

Windows Forms Discussion :

Problème d'écriture dans le fichier de configuration (groupe/section)


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut Problème d'écriture dans le fichier de configuration (groupe/section)
    Bonjour,
    Je souhaite écrire par programmation dans le fichier app.config aux emplacements que je défini, c'est à dire dans un groupe et une section particuliers :
    En l'occurrence sous "GestionCategorie/SerieSection"
    Code XML : 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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
          <sectionGroup name="GestionCategories">
            <section name="SerieSection"
                type="System.Configuration.SingleTagSectionHandler" />
          </sectionGroup>
        </configSections>
        <appSettings>
            <add key="maclé" value="ma valeur" />
            <add key="Uneclé" value="zzz" />
            <add key="maclé3" value="ma valeur" />
        </appSettings>
        <connectionStrings>
            <add name="WindowsApplication2.Properties.Settings.artcollectionConnectionString"
                connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\artcollection.mdf;Integrated Security=True;Connect Timeout=30"
                providerName="System.Data.SqlClient" />
        </connectionStrings>
      <GestionCategories>
        <SerieSection valeur1="Non renseigné" valeur2="value two" valeur3="third value" />
      </GestionCategories>
    </configuration>
    J'arrive à lire les données avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                Hashtable Serie = (Hashtable)ConfigurationManager.GetSection(
                    "GestionCategories/SerieSection");
                string value1 = Serie["valeur1"].ToString();
                string value2 = Serie["valeur2"].ToString();
                string value3 = Serie["valeur3"].ToString();
                textBox1.Text = value2;
                foreach (DictionaryEntry d in Serie)
                {
                    Console.WriteLine("{0} ; {1}", d.Key, d.Value);
                }
    Mais comment écrire mes données au bon endroit ?
    Le code ci-dessous n'écrit les données que dans <appsettings>
    (comme on le voit au-dessus. Les données sous SerieSection, je les ai copiées/collées directement avec Notepad++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.GetSection("SerieSection");
     
                config.AppSettings.Settings.Add("maclé3", "ma valeur");
     
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("SerieSection");
    Comment mettre "maclé3", "ma valeur" dans la section "SerieSection" ?
    Je suis à cour d'idées.
    J'ai déjà consulté les tuto
    https://nico-pyright.developpez.com/...sectioncsharp/
    et
    https://cdiese.fr/fichier-de-configu...net-en-10-min/
    sans trouver ma réponse (ou comprendre la solution).

    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut
    Je précise une chose :
    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
     
             {
                Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                config.GetSection("GestionCategories/SerieSection");
     
                Hashtable Serie = (Hashtable)ConfigurationManager.GetSection(
                    "GestionCategories/SerieSection");
                Serie.Add("valeur4", textBox2.Text.Trim());
                Console.WriteLine(Serie.Values.Count);
     
                Serie.Remove("valeur1");
                Console.WriteLine(Serie.Values.Count);
     
     
                config.Save(ConfigurationSaveMode.Modified);
                ConfigurationManager.RefreshSection("GestionCategories/SerieSection");
            }
    Fonctionne "en mémoire" lors de l'exécution.
    Une clé est ajoutée, et la clé est supprimée.
    Mais rien n'est écrit dans le fichier app.config (ou son pendant sous bin/debug).

  3. #3
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 212
    Par défaut
    Voici une petite synthèse de mon problème, que je n'arrive toujours pas à résoudre.

    Ce que je souhaite faire.

    Code XML : 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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <configSections>
          <sectionGroup name="GestionCategories">
            <section name="SerieSection" type="System.Configuration.SingleTagSectionHandler" />
            <section name="CatSection" type="System.Configuration.SingleTagSectionHandler" />
            <section name="NatSection" type="System.Configuration.SingleTagSectionHandler" />
            <section name="GisSection" type="System.Configuration.SingleTagSectionHandler" />
          </sectionGroup>
        </configSections>
        <GestionCategories>
        <SerieSection serie1="mavaleurS1" serie2="mavaleurS2" serie3="mavaleurS3" />
        <CatSection Cat1="mavaleurC1" Cat2="mavaleurC2" Cat3="mavaleurC3" />
        <NatSection Nat1="mavaleurN1" Nat2="mavaleurN2" Nat3="mavaleurN3" />
        <GisSection Gis1="mavaleurG1" Gis2="mavaleurG2" Gis3="mavaleurG3" />
      </GestionCategories>
    </configuration>

    1 - type SingleTagSectionHandler
    Les valeurs correspondent à des éléments de ComboBox. Je n'en connais pas le nombre (entre 3 et 20). C'est pourquoi je souhaite pouvoir créer des Clés/Valeurs dynamiquement avec SingleTagSectionHandler.
    Aucun autre type ne semble convenir à mon problème.
    2 - Les Sections doivent être placées dans un groupe. J'ai beaucoup d'autres groupes à créer.
    3 - Les valeurs de la section doivent pouvoir être énumérées avec un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach(DictionaryEntry d in section)
    {
    	Console.WriteLine("{0} ; {1}", d.Key, d.Value);
    }
    De manière à remplir aisément les ComboBox (par des valeurs que je ne connais pas a priori).

    Problèmes :
    1 - Je n'arrive pas à créer des sections personnalisées du type SingleTagSectionHandler.
    Peut-être est-ce impossible :
    Cf. https://docs.microsoft.com/fr-fr/dot...tframework-4.8
    Cette API prend en charge l'infrastructure du produit et n'est pas destinée à être utilisée directement à partir de votre code.
    2 - Je n'arrive pas à créer des groupes et ranger des sections à l'intérieur
    3 - Quand je créé des sections perso j'ai une erreur quand je veux les énumérer
    Erreur CS1579 L'instruction foreach ne peut pas fonctionner sur des variables de type 'Form1.SerieSection', car 'Form1.SerieSection' ne contient pas de définition d'instance publique pour 'GetEnumerator'
    4- Si ma section n'est pas définie par mon code (si je l'écris directement dans app.config), je ne peux pas écrire dedans (valeurs pas enregistré). Un problème de Scope probablement.

    En résumé :

    Soit je crée une section par code :
    - elle n'est pas du bon type
    - elle n'est pas énumérable,
    - elle n'est pas dans un groupe,
    - son nombre de clés est fixe,

    soit je la colle dans App.config et je ne peux pas enregistrer les modifications apportées à ses valeurs.

    Un moyen d'écrire dans une section de type SingleTagSectionHandler serait tout ce que je souhaite car je ne désire pas particulièrement créer groupes et sections à partir de mon code.
    Coller mes définitions dans App.config et que cela fonctionne m'irait très bien.
    Mais je ne sais pas comment modifier la valeur Scope d'une section de type SingleTagSectionHandler afin qu'elle s'enregistre (c'est éventuellement juste cela mon problème).

    Merci

Discussions similaires

  1. problème d'écriture dans un fichier
    Par cartonol dans le forum Oracle
    Réponses: 12
    Dernier message: 17/08/2006, 17h08
  2. [FTP] problème d'écriture dans un fichier
    Par oops! dans le forum Langage
    Réponses: 14
    Dernier message: 08/08/2006, 16h52
  3. problème d'écriture dans un fichier
    Par seurjer dans le forum Langage
    Réponses: 8
    Dernier message: 01/06/2006, 09h15
  4. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15
  5. Problème d'écriture dans un fichier xml
    Par vanoou dans le forum C++Builder
    Réponses: 1
    Dernier message: 13/07/2005, 02h28

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