Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

C# - How to create, read from and write to a custom configuration file?

Posted on 2011-03-24
6
1,369 Views
Last Modified: 2012-05-11
I have a C# console app that I have to modify.
The app uses a config file to save to and read from some values that could be used for future runs.  It does not use properties file for that because with the properties file you still can write to but that properties file would be different for each user, and this should be user independent.
That;s why the config file is used.
Currently, the app has an app.config file that resides in the main directory where all the source code is located, and <app_name>.config file that is located in the executable file's directory (\bin\Debug in this case).  The values stored by the application in the <app_name>.config file that is located in the executable file's directory.
But every time the application is recompiled, the <app_name>.config file is being overwritten by the app.config file located in source directory, and the custom values are reset to the values stored in the app.config file.
Questions: 1) is it possible to change valued in the app.config file as well as in the <app_name>.config file (by the application) so that the new values are not reset during compilation.
2) If not, what are other options?  My idea is to use a custom config file that would be could be used to write to and read from custom data just as the <app_name>.config file is.
But how and where to create, read from and write to a custom configuration file?
Code samples would be much appreciated.

The current code to read from and to write to looks like this:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
string storedValue = config.AppSettings.Settings["Param1"].Value
string newValue = "param1_newValue";
config.AppSettings.Settings["Param1"].Value = newValue;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

Thank you!
0
Comment
Question by:pavelmed
6 Comments
 
LVL 19

Assisted Solution

by:Raheman M. Abdul
Raheman M. Abdul earned 150 total points
ID: 35207859
0
 

Author Comment

by:pavelmed
ID: 35208020
This example is for WebConfiguration Manager, web.config file and Virtual directories.
I have a console application with no web access.
Can the example still be used for the ConfigurationManager?
0
 
LVL 10

Accepted Solution

by:
wls3 earned 200 total points
ID: 35208214
Yes, can do a lot of this with console.

http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.aspx

Also, I am bit of a Powershell nut, so, bear that in mind.  However, have you looked at attempting to resolve this the Powershell way?  Here is a very generic effort using the [XML] type to load the web.config and manipulate a setting:

http://get-powershell.com/post/2008/07/29/Editing-WebConfig-Files-with-PowerShell.aspx
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 2

Assisted Solution

by:ericpeckham
ericpeckham earned 150 total points
ID: 35219428
I've found it easiest just to create an XML file from your application, to store system-wide settings that can be changed at runtime.  That way you can put it where you want, and you have full control over it.  Messing around with custom configuration files has always been a pain and a disappointment for me.
0
 

Author Comment

by:pavelmed
ID: 35342956
Sorry I had to delay my final comments due to unrelated issues I was fully occupied with.

I ended up with a compromised solution - I kept saving the changes in the <app_name>.config file in the executable file directory, but after that I also saved the new values in the app.config file in the source code directory so that if a project is recompiled, the <app_name>.config and app.config files would have the same values.

// keeping the newly saved values in the <app_name>.config file
config.AppSettings.Settings["Param1"].Value = newValue;
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

// saving the new values also in the app.config file in the source code directory (if the directory and file exists)
// In my project, the exe file directory is two levels below the source code directory.
// and of course, I surrounded the code in try/catch block (now shown below)

string appExePath = Path.GetDirectoryName(Application.ExecutablePath);
int lastBSPos = appExePath.LastIndexOf("\\");
string appConfigPathDir = appExePath.Substring(0, lastBSPos);
lastBSPos = appConfigPathDir.LastIndexOf("\\");
appConfigPathDir = appConfigPathDir.Substring(0, lastBSPos + 1);
if (Directory.Exists(appConfigPathDir))
{
    config.SaveAs(appConfigPathDir + "app.config", ConfigurationSaveMode.Full);
    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", appConfigPathDir + "app.config");
}

I am going to split the points between participants of this call.
Thank you!
0
 

Author Closing Comment

by:pavelmed
ID: 35343016
I ended up with a compromised solution
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Problem!!! 8 37
jquery + C#.net radiobuttonlist 3 30
C#.net split string and then check appropriate checkboxlist 4 27
C# Service FileSystemwatcher isse 9 24
Article by: Najam
Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any qu…
Introduction This article series is supposed to shed some light on the use of IDisposable and objects that inherit from it. In essence, a more apt title for this article would be: using (IDisposable) {}. I’m just not sure how many people would ge…
Established in 1997, Technology Architects has become one of the most reputable technology solutions companies in the country. TA have been providing businesses with cost effective state-of-the-art solutions and unparalleled service that is designed…

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question