|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
|
Announcements
Want a new Job?
Chapters
Services
Feature Zones
|
IntroductionIn the The following namespaces are required: using System;
using System.IO;
using System.Xml;
using System.Reflection;
using System.Collections;
using System.Globalization;
using System.Configuration;
using System.Collections.Specialized;
The class looks like the following: namespace Configuration
{
public class ConfigSettingsSectionHandler : IConfigurationSectionHandler
{
static ConfigSettingsSectionHandler(){}
public object Create(object parent, object configContext,
System.Xml.XmlNode section)
{
NameValueCollection col = new NameValueCollection(
new CaseInsensitiveHashCodeProvider(CultureInfo.InvariantCulture),
new CaseInsensitiveComparer(CultureInfo.InvariantCulture));
foreach(XmlNode node in section.ChildNodes)
{
switch(node.Name)
{
case "add":
col.Add(node.Attributes["key"].Value,
node.Attributes["value"].Value);
break;
}
}
return col;
}
}
public class ConfigSettings
{
private string _configfilename, _query, _sectionName;
private XmlDocument _doc;
private XmlTextWriter _writer;
private XmlNodeList _nodes;
private XmlElement _appsettings, _node;
private XmlAttribute _attr1, _attr2;
private bool _bFileExists;
public ConfigSettings()
{
if(File.Exists(Assembly.GetExecutingAssembly().ToString() +
".exe.config"))
{
this.ConfigFileName =
Assembly.GetExecutingAssembly().ToString() + ".exe.config";
_bFileExists = true;
}
else
{
_bFileExists = false;
}
}
public ConfigSettings(string ConfigFileName)
{
if(File.Exists(ConfigFileName))
{
this.ConfigFileName = ConfigFileName;
_bFileExists = true;
}
else
{
_bFileExists = false;
}
}
public NameValueCollection GetConfig()
{
return (NameValueCollection)ConfigurationSettings.GetConfig(
SectionName);
}
public NameValueCollection GetConfig(string SectionName)
{
return (NameValueCollection)ConfigurationSettings.GetConfig(
SectionName);
}
public string GetValue(string AttributeName)
{
NameValueCollection col = this.GetConfig();
if(col[AttributeName] != null)
return Convert.ToString(col[AttributeName].ToString());
else
return String.Empty;
}
public void SetValue(string AttributeName, string Value)
{
XmlDocument = new XmlDocument();
XmlDocument.Load(this.ConfigFileName);
Query = "configuration/" + SectionName;
AppSettingsNode =
(XmlElement)this.XmlDocument.SelectSingleNode(this.Query);
if(AppSettingsNode == null)
return;
Query += "/add[@key='" + AttributeName.ToString() + "']";
XmlNodeList = this.XmlDocument.SelectNodes(this.Query);
if(XmlNodeList.Count > 0)
Node = (XmlElement)XmlNodeList[0];
else
{
Node = this.XmlDocument.CreateElement("add");
XmlAttribute1 =
this.XmlDocument.CreateAttribute("key");
XmlAttribute1.Value = AttributeName.ToString();
Node.Attributes.SetNamedItem(XmlAttribute1);
XmlAttribute2 =
this.XmlDocument.CreateAttribute("value");
Node.Attributes.SetNamedItem(XmlAttribute2);
AppSettingsNode.AppendChild(Node);
}
Node.Attributes["value"].Value = Value.ToString();
this.XmlDocument.Save(this.ConfigFileName);
}
public void CreateConfigFile(string ConfigFileName,
string sectionName)
{
FileStream file = new FileStream(ConfigFileName,
System.IO.FileMode.Create);
file.Close();
Writer = new XmlTextWriter(ConfigFileName,
System.Text.Encoding.Unicode);
Writer.Formatting = Formatting.Indented;
Writer.WriteRaw("<?xml version=\"1.0\" ?>\n");
Writer.WriteRaw("<configuration>\n");
Writer.WriteRaw("<configSections>\n");
string str = String.Format("<section type="{1}" name="{0}" />\n",
"\"" + sectionName.ToString() + "\"",
"\"Configuration.ConfigSettingsSectionHandler, Configuration\"");
Writer.WriteRaw(str.ToString());
Writer.WriteRaw("</configSections>\n");
Writer.WriteRaw("<" + sectionName.ToString() + ">\n");
Writer.WriteRaw("</" ? + sectionName.ToString()>\n");
Writer.Flush();
Writer.Close();
}
}
public string ConfigFileName
{
get{ return _configfilename;}
set{ _configfilename = value;}
}
public XmlDocument XmlDocument
{
get{ return _doc;}
set{ _doc = value;}
}
public XmlTextWriter Writer
{
get{ return _writer;}
set{ _writer = value;}
}
public XmlNodeList XmlNodeList
{
get{ return _nodes;}
set{ _nodes = value;}
}
public XmlElement AppSettingsNode
{
get{ return _appsettings;}
set{ _appsettings = value;}
}
public XmlElement Node
{
get{ return _node;}
set{ _node = value;}
}
public string Query
{
get{ return _query;}
set{ _query = value;}
}
public XmlAttribute XmlAttribute1
{
get{ return _attr1;}
set{ _attr1 = value;}
}
public XmlAttribute XmlAttribute2
{
get{ return _attr2;}
set{ _attr2 = value;}
}
public string SectionName
{
get{ return _sectionName;}
set{ _sectionName = value;}
}
public bool FileExists
{
get{return _bFileExists;}
set{_bFileExists = value;}
}
}
Using the classTo use the class you will simply do one of the following: private ConfigSettings config = new ConfigSettings();
and then just use either the GetConfig(), GetValue(), SetValue() methods as such: private void Form1_Load(object sender, System.EventArgs e)
{
config.ConfigFileName = "Test.exe.config";
config.SectionName = "ApplicationData";
string height = config.GetValue("Height");
if(height != String.Empty)
this.Height = Convert.ToInt32(height.ToString());
// or return the whole collection of a particular section.
NameValueCollection collection = config.GetConfig("ApplicationData");
if(collection["Width"] != null)
this.Width = Convert.ToInt32(collection["Width"].ToString());
}
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
config.SectionName = "ApplicationData";
config.SetValue("Height", this.Height.ToString());
config.SetValue("Width", this.Width.ToString());
}
ConclusionI just thought I would post the latest updates, there are still many changes to come including a code clean-up as well as more methods to interact with the config file. Let me know what you think.
|
||||||||||||||||||||||