DotNet程序配置文件
2016-11-27 19:46
190 查看
在实际的项目开发中,对于项目的相关信息的配置较多,在.NET项目中,我们较多的将程序的相关配置直接存储的.config文件中,例如web.config和app.config。
.NET中配置文件分为两部分:配置的实际内容(位于appSetting节点);指定了节点的处理程序(位于configSections节点)。
在.NET程序中,.config文件存储相关配置是以xml格式,如果我们需要对配置文件进行读取和写入,以及相关节点的删除,我们可以直接采用处理xml文件的方式进行操作。也可以采用.NET提供的类System.Configuration进行相关操作。
在System.Configuration类型中,对外提供了几种方法调用,在这里介绍三种较为常用的:AppSettings,ConnectionStrings,GetSection。
接下来看一下这些方法:
1.AppSettings属性:
/// <summary>
/// 设置配置值(存在则更新,不存在则新增)
/// </summary>
/// <param name="key">节点名称</param>
/// <param name="value">节点值</param>
public static void SetAppSettingValue(string key, string value)
{
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException(key);
}
if (string.IsNullOrEmpty(value))
{
throw new ArgumentNullException(value);
}
try
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var setting = config.AppSettings.Settings[key];
if (setting == null)
{
config.AppSettings.Settings.Add(key, value);
}
else
{
setting.Value = value;
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}[/code]
/// <summary>
/// 设置连接字符串的值(存在则更新,不存在则新增)
/// </summary>
/// <param name="name">名称</param>
/// <param name="connstr">连接字符串</param>
/// <param name="provider">程序名称属性</param>
public static void SetConnectionString(string name, string connstr, string provider)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentNullException(name);
}
if (string.IsNullOrEmpty(connstr))
{
throw new ArgumentNullException(connstr);
}
if (string.IsNullOrEmpty(provider))
{
throw new ArgumentNullException(provider);
}
try
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connStrSettings = config.ConnectionStrings.ConnectionStrings[name];
if (connStrSettings != null)
{
connStrSettings.ConnectionString = connstr;
connStrSettings.ProviderName = provider;
}
else
{
connStrSettings = new ConnectionStringSettings(name, connstr, provider);
config.ConnectionStrings.ConnectionStrings.Add(connStrSettings);
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}[/code]
/// <summary>
/// 更新或新增[appSettings]节点的子节点值,存在则更新子节点Value,不存在则新增子节点,返回成功与否布尔值
/// </summary>
/// <param name="filename">配置文件的路径</param>
/// <param name="key">子节点Key值</param>
/// <param name="value">子节点value值</param>
/// <returns>返回成功与否布尔值</returns>
public static bool UpdateOrCreateAppSetting(string filename, string key, string value)
{
if (string.IsNullOrEmpty(filename))
{
throw new ArgumentNullException(filename);
}
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException(key);
}
if (string.IsNullOrEmpty(value))
{
throw new ArgumentNullException(value);
}
var doc = new XmlDocument();
//加载配置文件
doc.Load(filename);
//得到[appSettings]节点
var node = doc.SelectSingleNode("//appSettings");
try
{
//得到[appSettings]节点中关于Key的子节点
if (node != null)
{
var element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
if (element != null)
{
//存在则更新子节点Value
element.SetAttribute("value", value);
}
else
{
//不存在则新增子节点
var subElement = doc.CreateElement("add");
subElement.SetAttribute("key", key);
subElement.SetAttribute("value", value);
node.AppendChild(subElement);
}
}
//保存至配置文件(方式一)
using (var xmlwriter = new XmlTextWriter(filename, null))
{
xmlwriter.Formatting = Formatting.Indented;
doc.WriteTo(xmlwriter);
xmlwriter.Flush();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return true;
}[/code]
/// <summary>
/// 删除[appSettings]节点中包含Key值的子节点,返回成功与否布尔值
/// </summary>
/// <param name="filename">配置文件路径</param>
/// <param name="key">要删除的子节点Key值</param>
/// <returns>返回成功与否布尔值</returns>
public static bool DeleteByKey(string filename, string key)
{
if (string.IsNullOrEmpty(filename))
{
throw new ArgumentNullException(filename);
}
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException(key);
}
var doc = new XmlDocument();
//加载配置文件
doc.Load(filename);
//得到[appSettings]节点
var node = doc.SelectSingleNode("//appSettings");
//得到[appSettings]节点中关于Key的子节点
if (node != null)
{
var element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
if (element != null)
{
//存在则删除子节点
if (element.ParentNode != null) element.ParentNode.RemoveChild(element);
}
}
try
{
//保存至配置文件(方式一)
using (var xmlwriter = new XmlTextWriter(filename, null))
{
xmlwriter.Formatting = Formatting.Indented;
doc.WriteTo(xmlwriter);
xmlwriter.Flush();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return true;
}[/code]
.NET中配置文件分为两部分:配置的实际内容(位于appSetting节点);指定了节点的处理程序(位于configSections节点)。
在.NET程序中,.config文件存储相关配置是以xml格式,如果我们需要对配置文件进行读取和写入,以及相关节点的删除,我们可以直接采用处理xml文件的方式进行操作。也可以采用.NET提供的类System.Configuration进行相关操作。
在System.Configuration类型中,对外提供了几种方法调用,在这里介绍三种较为常用的:AppSettings,ConnectionStrings,GetSection。
接下来看一下这些方法:
1.AppSettings属性:
/// <summary>
/// 获取连接字符串
/// </summary>
/// <param name="name">连接字符串名称</param>
/// <returns></returns>
public static string GetConnectionString(string name)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentNullException(name);
}
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}
/// <summary>
/// 设置配置值(存在则更新,不存在则新增)
/// </summary>
/// <param name="key">节点名称</param>
/// <param name="value">节点值</param>
public static void SetAppSettingValue(string key, string value)
{
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException(key);
}
if (string.IsNullOrEmpty(value))
{
throw new ArgumentNullException(value);
}
try
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var setting = config.AppSettings.Settings[key];
if (setting == null)
{
config.AppSettings.Settings.Add(key, value);
}
else
{
setting.Value = value;
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}[/code]
/// <summary>
/// 设置连接字符串的值(存在则更新,不存在则新增)
/// </summary>
/// <param name="name">名称</param>
/// <param name="connstr">连接字符串</param>
/// <param name="provider">程序名称属性</param>
public static void SetConnectionString(string name, string connstr, string provider)
{
if (string.IsNullOrEmpty(name))
{
throw new ArgumentNullException(name);
}
if (string.IsNullOrEmpty(connstr))
{
throw new ArgumentNullException(connstr);
}
if (string.IsNullOrEmpty(provider))
{
throw new ArgumentNullException(provider);
}
try
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connStrSettings = config.ConnectionStrings.ConnectionStrings[name];
if (connStrSettings != null)
{
connStrSettings.ConnectionString = connstr;
connStrSettings.ProviderName = provider;
}
else
{
connStrSettings = new ConnectionStringSettings(name, connstr, provider);
config.ConnectionStrings.ConnectionStrings.Add(connStrSettings);
}
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("connectionStrings");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}[/code]
/// <summary>
/// 更新或新增[appSettings]节点的子节点值,存在则更新子节点Value,不存在则新增子节点,返回成功与否布尔值
/// </summary>
/// <param name="filename">配置文件的路径</param>
/// <param name="key">子节点Key值</param>
/// <param name="value">子节点value值</param>
/// <returns>返回成功与否布尔值</returns>
public static bool UpdateOrCreateAppSetting(string filename, string key, string value)
{
if (string.IsNullOrEmpty(filename))
{
throw new ArgumentNullException(filename);
}
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException(key);
}
if (string.IsNullOrEmpty(value))
{
throw new ArgumentNullException(value);
}
var doc = new XmlDocument();
//加载配置文件
doc.Load(filename);
//得到[appSettings]节点
var node = doc.SelectSingleNode("//appSettings");
try
{
//得到[appSettings]节点中关于Key的子节点
if (node != null)
{
var element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
if (element != null)
{
//存在则更新子节点Value
element.SetAttribute("value", value);
}
else
{
//不存在则新增子节点
var subElement = doc.CreateElement("add");
subElement.SetAttribute("key", key);
subElement.SetAttribute("value", value);
node.AppendChild(subElement);
}
}
//保存至配置文件(方式一)
using (var xmlwriter = new XmlTextWriter(filename, null))
{
xmlwriter.Formatting = Formatting.Indented;
doc.WriteTo(xmlwriter);
xmlwriter.Flush();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return true;
}[/code]
/// <summary>
/// 删除[appSettings]节点中包含Key值的子节点,返回成功与否布尔值
/// </summary>
/// <param name="filename">配置文件路径</param>
/// <param name="key">要删除的子节点Key值</param>
/// <returns>返回成功与否布尔值</returns>
public static bool DeleteByKey(string filename, string key)
{
if (string.IsNullOrEmpty(filename))
{
throw new ArgumentNullException(filename);
}
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException(key);
}
var doc = new XmlDocument();
//加载配置文件
doc.Load(filename);
//得到[appSettings]节点
var node = doc.SelectSingleNode("//appSettings");
//得到[appSettings]节点中关于Key的子节点
if (node != null)
{
var element = (XmlElement)node.SelectSingleNode("//add[@key='" + key + "']");
if (element != null)
{
//存在则删除子节点
if (element.ParentNode != null) element.ParentNode.RemoveChild(element);
}
}
try
{
//保存至配置文件(方式一)
using (var xmlwriter = new XmlTextWriter(filename, null))
{
xmlwriter.Formatting = Formatting.Indented;
doc.WriteTo(xmlwriter);
xmlwriter.Flush();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return true;
}[/code]
相关文章推荐
- DotNet程序配置文件
- DotNet程序配置文件
- winform 程序的配置文件——App.config
- 十分棘手的问题,使用vs2005在文件系统机制下开发出来的web程序,配置到iis就不能正常运行?
- 一个spring+hibernate开发的小程序的修改(其中配置文件使用的是HibernateSynchronizer插件生成)
- 程序中要用到的log4j配置文件,绝对可用的(备份)
- 综合应用WPF/WCF/WF/LINQ之十六:关于更改XBAP程序的配置文件的问题
- 为你的程序/系统提供强大的配置功能(选项配置文件的读写)
- windows程序自启动的几种方法(三)系统配置文件
- 在程序里修改配置文件
- DotNet系统安装程序制作StepByStep(包括FrameWork安装和数据库安装配置)C#
- struts资源文件的配置及程序调试的方法-视频(包含所有中文乱码的解决方案)
- 用配置文件写一个一劳永逸的jdbc联接程序
- 在程序里修改配置文件
- 我的log4net 1.2.9 的配置文件和如何配置程序的说明
- 对于dotnet的配置文件(app.config and web.config)
- 利用程序动态管理Web.config文件的配置
- 程序中获得配置文件输入流和输出流的通用方法
- dotnet 上传大文件的配置的方法
- [dotNET]如何利用ConfigurationSettings.AppSettings.GetValues读取配置文件中多个同Key的value