动态修改读取webconfig
using System;
using System.Collections.Generic;
using System.Text;
namespace CoronaSet
{
#region
/**//// <summary>
///用于修改 Web.config 文件中 <appSettings></appSettings> 子节点的类。
///</summary>
public class AppSettings
{
private string filename;
private System.IO.StreamReader reader;
private System.Xml.XmlDocument xd;
private System.Xml.XmlNodeList nl;
private System.Xml.XmlNode sn;
构造函数 +1 次重载#region 构造函数 +1 次重载
/**//// <summary>
/// 默认构造函数,初始化 Web 应用程序目录下的 Web.config 文件。
/// </summary>
public AppSettings()
{
this.filename = System.IO.Directory.GetDirectoryRoot(System.IO.Directory.GetCurrentDirectory())+"CoronaSet\\CoronaSet\\web.config";//System.Web.HttpContext.Current.Server.MapPath("web.config") + "\\web.config";
this.reader = new System.IO.StreamReader(filename);
this.xd = new System.Xml.XmlDocument();
this.xd.Load(reader);
this.reader.Close();
sn = xd.SelectSingleNode("//configuration/location/appSettings");
nl = sn.ChildNodes;
}
/**//// <summary>
/// 构造函数,以指定的文件初始化对像。
/// </summary>
/// <param name="FileName">文件名</param>
public AppSettings(string FileName)
{
this.filename = FileName;
this.reader = new System.IO.StreamReader(filename);
this.xd = new System.Xml.XmlDocument();
this.xd.Load(reader);
this.reader.Close();
sn = xd.SelectSingleNode("//configuration/appSettings");
nl = sn.ChildNodes;
}
#endregion
索引器,访问指定的节点 +1 次重载。#region 索引器,访问指定的节点 +1 次重载。
/**//// <summary>
/// 返回指定键名的子节点键值。
/// </summary>
public string this[string Key]
{
get
{
if (Key != null || Key.Length != 0)
{
int index = this.Find(Key);
if (index != -1)
{
return nl[index].Attributes["value"].Value;
}
else
return null;
}
else
{
return null;
}
}
set
{
if (Key != null || Key.Length != 0)
{
int index = Find(Key);
if (index == -1)// 创建
{
this.Add(Key, value);
}
else
{
nl[index].Attributes["value"].Value = value;
}
}
else
{
return;
}
}
}
/**//// <summary>
/// 返回指定索引的子节点键值。
/// </summary>
public string this[int Index]
{
get
{
return nl[Index].Attributes["value"].Value;
}
set
{
nl[Index].Attributes["value"].Value = value;
}
}
#endregion
获取子节点的数量#region 获取子节点的数量
/**//// <summary>
/// 子节点的数量
/// </summary>
public int Count
{
get { return nl.Count; }
}
#endregion
删除子节点 +1 次重载。#region 删除子节点 +1 次重载。
/**//// <summary>
/// 移除指定键名的子节点
/// </summary>
/// <param name="Key">键名</param>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Remove(string Key)
{
int index = this.Find(Key);
if (index != -1)
{
this.sn.RemoveChild(this.nl[index]);
return true;
}
else
return false;
}
/**//// <summary>
/// 移除指索引的子节点
/// </summary>
/// <param name="Index">子节点的索引</param>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Remove(int Index)
{
try
{
this.sn.RemoveChild(this.nl[Index]);
return true;
}
catch
{
return false;
}
}
#endregion
插入子节点。#region 插入子节点。
/**//// <summary>
/// 插入子节点。如果指定的 Key 键已存在,则修改当前 Key 键的节点参数。
/// </summary>
/// <param name="Key">键名</param>
/// <param name="Value">键值</param>
/// <returns>如果是新插入则返回 true, 如果是修改当前的子节点返回 false</returns>
public bool Add(string Key, string Value)
{
int result = this.Find(Key);
if (result == -1)
{
System.Xml.XmlElement elem = xd.CreateElement("add");
System.Xml.XmlAttribute[] xa = new System.Xml.XmlAttribute[2];
xa[0] = xd.CreateAttribute("key");
xa[1] = xd.CreateAttribute("value");
xa[0].Value = Key;
xa[1].Value = Value;
elem.Attributes.Append(xa[0]);
elem.Attributes.Append(xa[1]);
sn.AppendChild(elem);
return true;
}
else
{
this[result] = Value;
return false;
}
}
#endregion
保存为磁盘文件 +1 次重载。#region 保存为磁盘文件 +1 次重载。
/**//// <summary>
/// 以默认路径、默认名称保存。
/// </summary>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Save()
{
return Save(filename);
}
/**//// <summary>
/// 以指定的文件名保存。
/// </summary>
/// <param name="FileName">文件名</param>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Save(string FileName)
{
try
{
xd.Save(FileName);
return true;
}
catch
{
return false;
}
}
#endregion
查找、测试子节点 2 个函数。#region 查找、测试子节点 2 个函数。
/**//// <summary>
/// 测试指定键名的子节点是否存在
/// </summary>
/// <param name="Key">键名</param>
/// <returns>存在返回 true, 不存在返回 false</returns>
public bool Exists(string Key)
{
return Find(Key) != -1;
}
/**//// <summary>
/// 查找指定键名的子节点。
/// </summary>
/// <param name="Key">键名</param>
/// <returns>成功返回子节点的索引,失败返回 -1 值。</returns>
public int Find(string Key)
{
string Value;
if (nl == null)
return -1;
else
{
for (int cnt = 0; cnt < nl.Count; cnt++)
{
Value = nl.Item(cnt).Attributes["key"].Value.ToLower();
if (Value == Key.ToLower()) return cnt;
}
return -1;
}
}
#endregion
}
#endregion
}
using System.Collections.Generic;
using System.Text;
namespace CoronaSet
{
#region
/**//// <summary>
///用于修改 Web.config 文件中 <appSettings></appSettings> 子节点的类。
///</summary>
public class AppSettings
{
private string filename;
private System.IO.StreamReader reader;
private System.Xml.XmlDocument xd;
private System.Xml.XmlNodeList nl;
private System.Xml.XmlNode sn;
构造函数 +1 次重载#region 构造函数 +1 次重载
/**//// <summary>
/// 默认构造函数,初始化 Web 应用程序目录下的 Web.config 文件。
/// </summary>
public AppSettings()
{
this.filename = System.IO.Directory.GetDirectoryRoot(System.IO.Directory.GetCurrentDirectory())+"CoronaSet\\CoronaSet\\web.config";//System.Web.HttpContext.Current.Server.MapPath("web.config") + "\\web.config";
this.reader = new System.IO.StreamReader(filename);
this.xd = new System.Xml.XmlDocument();
this.xd.Load(reader);
this.reader.Close();
sn = xd.SelectSingleNode("//configuration/location/appSettings");
nl = sn.ChildNodes;
}
/**//// <summary>
/// 构造函数,以指定的文件初始化对像。
/// </summary>
/// <param name="FileName">文件名</param>
public AppSettings(string FileName)
{
this.filename = FileName;
this.reader = new System.IO.StreamReader(filename);
this.xd = new System.Xml.XmlDocument();
this.xd.Load(reader);
this.reader.Close();
sn = xd.SelectSingleNode("//configuration/appSettings");
nl = sn.ChildNodes;
}
#endregion
索引器,访问指定的节点 +1 次重载。#region 索引器,访问指定的节点 +1 次重载。
/**//// <summary>
/// 返回指定键名的子节点键值。
/// </summary>
public string this[string Key]
{
get
{
if (Key != null || Key.Length != 0)
{
int index = this.Find(Key);
if (index != -1)
{
return nl[index].Attributes["value"].Value;
}
else
return null;
}
else
{
return null;
}
}
set
{
if (Key != null || Key.Length != 0)
{
int index = Find(Key);
if (index == -1)// 创建
{
this.Add(Key, value);
}
else
{
nl[index].Attributes["value"].Value = value;
}
}
else
{
return;
}
}
}
/**//// <summary>
/// 返回指定索引的子节点键值。
/// </summary>
public string this[int Index]
{
get
{
return nl[Index].Attributes["value"].Value;
}
set
{
nl[Index].Attributes["value"].Value = value;
}
}
#endregion
获取子节点的数量#region 获取子节点的数量
/**//// <summary>
/// 子节点的数量
/// </summary>
public int Count
{
get { return nl.Count; }
}
#endregion
删除子节点 +1 次重载。#region 删除子节点 +1 次重载。
/**//// <summary>
/// 移除指定键名的子节点
/// </summary>
/// <param name="Key">键名</param>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Remove(string Key)
{
int index = this.Find(Key);
if (index != -1)
{
this.sn.RemoveChild(this.nl[index]);
return true;
}
else
return false;
}
/**//// <summary>
/// 移除指索引的子节点
/// </summary>
/// <param name="Index">子节点的索引</param>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Remove(int Index)
{
try
{
this.sn.RemoveChild(this.nl[Index]);
return true;
}
catch
{
return false;
}
}
#endregion
插入子节点。#region 插入子节点。
/**//// <summary>
/// 插入子节点。如果指定的 Key 键已存在,则修改当前 Key 键的节点参数。
/// </summary>
/// <param name="Key">键名</param>
/// <param name="Value">键值</param>
/// <returns>如果是新插入则返回 true, 如果是修改当前的子节点返回 false</returns>
public bool Add(string Key, string Value)
{
int result = this.Find(Key);
if (result == -1)
{
System.Xml.XmlElement elem = xd.CreateElement("add");
System.Xml.XmlAttribute[] xa = new System.Xml.XmlAttribute[2];
xa[0] = xd.CreateAttribute("key");
xa[1] = xd.CreateAttribute("value");
xa[0].Value = Key;
xa[1].Value = Value;
elem.Attributes.Append(xa[0]);
elem.Attributes.Append(xa[1]);
sn.AppendChild(elem);
return true;
}
else
{
this[result] = Value;
return false;
}
}
#endregion
保存为磁盘文件 +1 次重载。#region 保存为磁盘文件 +1 次重载。
/**//// <summary>
/// 以默认路径、默认名称保存。
/// </summary>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Save()
{
return Save(filename);
}
/**//// <summary>
/// 以指定的文件名保存。
/// </summary>
/// <param name="FileName">文件名</param>
/// <returns>成功返回 true, 失败返回 false</returns>
public bool Save(string FileName)
{
try
{
xd.Save(FileName);
return true;
}
catch
{
return false;
}
}
#endregion
查找、测试子节点 2 个函数。#region 查找、测试子节点 2 个函数。
/**//// <summary>
/// 测试指定键名的子节点是否存在
/// </summary>
/// <param name="Key">键名</param>
/// <returns>存在返回 true, 不存在返回 false</returns>
public bool Exists(string Key)
{
return Find(Key) != -1;
}
/**//// <summary>
/// 查找指定键名的子节点。
/// </summary>
/// <param name="Key">键名</param>
/// <returns>成功返回子节点的索引,失败返回 -1 值。</returns>
public int Find(string Key)
{
string Value;
if (nl == null)
return -1;
else
{
for (int cnt = 0; cnt < nl.Count; cnt++)
{
Value = nl.Item(cnt).Attributes["key"].Value.ToLower();
if (Value == Key.ToLower()) return cnt;
}
return -1;
}
}
#endregion
}
#endregion
}