?
Solved

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

Posted on 2011-03-24
6
Medium Priority
?
1,502 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 450 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 600 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
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
LVL 2

Assisted Solution

by:ericpeckham
ericpeckham earned 450 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

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

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

This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
This article aims to explain the working of CircularLogArchiver. This tool was designed to solve the buildup of log file in cases where systems do not support circular logging or where circular logging is not enabled
Planning to migrate your EDB file(s) to a new or an existing Outlook PST file? This video will guide you how to convert EDB file(s) to PST. Besides this, it also describes, how one can easily search any item(s) from multiple folders or mailboxes…
Hi, this video explains a free download that you can incorporate into your Access databases, or use stand-alone for contact management. Contacts -- Names, Addresses, Phone Numbers, eMail Addresses, Websites, Lists, Projects, Notes, Attachments…
Suggested Courses

588 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