Solved

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

Posted on 2011-03-24
6
1,350 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 18

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
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

This article is for Object-Oriented Programming (OOP) beginners. An Interface contains declarations of events, indexers, methods and/or properties. Any class which implements the Interface should provide the concrete implementation for each Inter…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
This video demonstrates how to create an example email signature rule for a department in a company using CodeTwo Exchange Rules. The signature will be inserted beneath users' latest emails in conversations and will be displayed in users' Sent Items…

914 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

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now