برای کار با آیتمهای فایل پیکربندی, از کد زیر استفاده میشود:
کد:
System.Configuration.ConfigurationSettings.AppSett ings
اما این روش مشکلاتی دارد مثل عدم امکان حذف یا تغییر...
احتمالا بهترین راه اینست که فایل پیکربندی را بصورت فایل XML باز کرده تغییر داده و نهایتا ذخیره کنیم. در اینجا کد های لازم برای عملیات یاد شده را میبینیم(البته بدون جزئیات نامربوط به موضوع اصلی):
1-افزون نود:
کد:
public void AddKey(string strKey, string strValue)
{
XmlNode appSettingsNode =
xmlDoc.SelectSingleNode("configuration/appSettings");
if (KeyExists(strKey))
throw new ArgumentException("Key name: <" + strKey + "> already exists.");
XmlNode newChild = appSettingsNode.FirstChild.Clone();//Structure Copy
newChild.Attributes["key"].Value = strKey;
newChild.Attributes["value"].Value = strValue;
appSettingsNode.AppendChild(newChild);
}
در نهایت فایل را در محل اصلی ذخیره میکنیم که در وب و ویندوز محل متفاوتی دارند(البته مجوز rewrite باید داشته باشیم).
2-تغییر مقدار:
کد:
public void UpdateKey(string strKey, string newValue)
{
if (!KeyExists(strKey))
throw new ArgumentNullException("Key", "<" + strKey + "> does not exist.");
XmlNode appSettingsNode = xmlDoc.SelectSingleNode("configuration/appSettings");
// Attempt to locate the requested setting.
foreach (XmlNode childNode in appSettingsNode)
{
if (childNode.Attributes["key"].Value == strKey)
childNode.Attributes["value"].Value = newValue;
}
//Save
}
3-حذف نود:
کد:
// Deletes a key from the App.config
public void DeleteKey(string strKey)
{
if (!KeyExists(strKey))
throw new ArgumentNullException("Key", "<" + strKey + "> does not exist.");
XmlNode appSettingsNode = xmlDoc.SelectSingleNode("configuration/appSettings");
// Attempt to locate the requested setting.
foreach (XmlNode childNode in appSettingsNode)
{
if (childNode.Attributes["key"].Value == strKey)
appSettingsNode.RemoveChild(childNode);
}
//save
}
متد KeyExist:
کد:
public bool KeyExists(string strKey)
{
XmlNode appSettingsNode =
xmlDoc.SelectSingleNode("configuration/appSettings");
// Attempt to locate the requested setting.
foreach (XmlNode childNode in appSettingsNode)
{
if (childNode.Attributes["key"].Value == strKey)
return true;
}
return false;
}
تذکر 1: کدها کاملا گویاست.
تذکر 2: منبع
http://www.CodeProject.com