Ecrire dans un fichier de configuration

[Résolu]
Signaler
Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
-
Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
-
Bonjour à tous,

Je souhaite faire un fichier de configuration pour une application. Je l'ai fait et j'arrive bien à récupérer les valeurs qui se trouvent dans ce fichier mais je ne parviens pas à écrire dans ce fichier.
Mon but serait de regarder si dans ce fichier il y a déjà une ligne (prenons comme exemple la ligne suivante :  <

addkey="maCle
"
value="maValeur
"
/>

Si cette ligne n'existe pas, je voudrais l'ajouter à mon fichier app.config, et si cette ligne existe déjà, je voudrais "simplement" modifier le champ valeur. J'ai donc penser faire une fonction qui permettent d'écrire dans le fichier de  configuration mais je n'y parviens pas. La structure de ma fonction est la suivante :
private

void EcrireDansConfig(
String cle,
String val){

//Rajoute ou modifie (si deja present) une ligne dans

//le fichier de config, ayant pour cle "cle" et pour

//valeur "val"System.Configuration.

Configuration config = 
   ConfigurationManager.OpenExeConfiguration
ConfigurationUserLevel.None);

//Si la ligne ayant pour cle "cle" n'existe pas, il faut

//totalement creer la ligne

if (config.Sections[cle] ==
null){

     //là je ne vois pas comment faire

}

//Sinon, il faut seulement changer l'ancienne valeur

//par la nouvelle valeur "val"

else{

//Suppression de l'ancienne ligne

                  ???

//Creation de la nouvelle

                  ???
}

}

Voila, j'espère avoir bien expliqué le problème.
Merci pour votre aide

10 réponses

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
Ce que te propose SharpMao  marche très bien :
Properties.Settings.Default.Test = "Une nouvelle valeur";

Properties.Settings.Default.Save();

Et pour la lecture, c'est le même principe :
Properties.Settings.Default.Reload();

string uneVariable = Properties.Settings.Default.Test
Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
1
Merci beaucoup ça MARCHE !!!

Je met le code pour écrire et lire dans un fichier de config (App.config) si ça peut servir

private

String LireDansConfig(
String nomDuChamp){

            //récupère dans le fichier de config,  la valeur du champ nomDuChamp et la retourne            Properties.

Settings.Default.Reload();

            string valeurChampConfig = Properties.
Settings.Default.derniereDateTraitee;

   return valeurChampConfig;}

private
void EcrireDansConfig(
String cle,
String val){          

//Rajoute ou modifie (si d‚ja pr‚sent) une ligne dans

             //le fichier de config, ayant pour cle "cle" et pour

             //valeur "val"                  Properties.

Settings.Default.derniereDateTraitee =
"06/06/1985";               Properties.

Settings.Default.Save();}

MERCI ENCORE      
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
64
Hello,

Si tu travailles avec VS2005, tu as deux types d'entrées dans le fichier de config : User et Application.
La différence se situe essentiellement dans le fait que les types User peuvent être modifiés très facilement.
Exemple pour une propriété nommée Test et de type string

Properties.Settings.Default.Test = "Une nouvelle valeur";

Properties.Settings.Default.Save();

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
1
Merci pour ta réponse SharpMao

Oui je travaille sous VS2005. Le fait de faire  :  Properties.Settings.Default.Test = "Une nouvelle valeur";
me changerait directement mon fichier de configuration App.config ?
J'ai essayé ton code mais j'ai l'erreur "le nom properties n'existe pas", comment faut il le définir ?
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
57
Salut,
Il faut aller dans les propriétés du projet, onglet 'Settings'.
Tu peux alors définir le nom, le type, la valeur et le scope pour ta variable.

<hr />
-Blog-
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
10
Et rajouter la clause using qui va bien pour avoir accès au namespace Properties...
Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
1
Je voudrais utiliser les fonctions classiques des fichiers de config pour garder la même façon de travailler pour la lecture ET pour l'écriture d'un fichier de config... Par exemple pour la lecture, j'ai fais la fonction suivante (qui fonctionne sans problème) :

private

String LireDansConfig(
String nomDuChamp){

//récupere dans le fichier de config,

//la valeur du champ nomDuChamp et la retourneSystem.Configuration.

Configuration config =

ConfigurationManager.OpenExeConfiguration(
ConfigurationUserLevel.None);

return config.AppSettings.Settings[nomDuChamp].Value;}

Il n'existe donc pas de fonction "similaires" pour écrire dans le fichier de config ??? Ce serait étonnant tout de même... Mais c'est vrai qu'après recherches, on trouve facilement de la doc sur la lecture d'un fichier de config, mais pour l'écriture dans ce dernier je ne trouve rien de comparable.
Quelqu'un connaitrait une technique ou un lien sur lequel me diriger ?
 
Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
1
Désolé c'est tout mal indenté j'ai pourtant fais attention 
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
64
Encore un détail, si c'est pour une date, tu peux mettre directement une valeur de type date dedans depuis l'éditeur,
Comme ça tu peux faire

Settings
.Default.derniereDateTraitee = DateTime.Now;

Et

DateTime last = Settings.Default.derniereDateTraitee ;

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
135
Date d'inscription
mercredi 23 mai 2007
Statut
Membre
Dernière intervention
7 avril 2012
1
Ok merci, j'en prend note, mais pour l'instant je ne sais pas encore si le champ que j'aurai à récupérer sera une "vraie" date ou si se sera un string qui ressemble à une date