using System.Xml;
using System.IO;
using System; namespace Framework.Common
{
/// <summary>
/// 用于获取或设置Web.config/*.exe.config中节点数据的辅助类
/// </summary>
public sealed class AppConfig
{
private string filePath; /// <summary>
/// 从当前目录中按顺序检索Web.Config和*.App.Config文件。
/// 如果找到一个,则使用它作为配置文件;否则会抛出一个ArgumentNullException异常。
/// </summary>
public AppConfig()
{
string webconfig = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web.Config");
string appConfig = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.Replace(".vshost", ""); if (File.Exists(webconfig))
{
filePath = webconfig;
}
else if (File.Exists(appConfig))
{
filePath = appConfig;
}
else
{
throw new ArgumentNullException("没有找到Web.Config文件或者应用程序配置文件, 请指定配置文件");
}
} /// <summary>
/// 用户指定具体的配置文件路径
/// </summary>
/// <param name="configFilePath">配置文件路径(绝对路径)
public AppConfig(string configFilePath)
{
filePath = configFilePath;
} /// <summary>
/// 设置程序的config文件
/// </summary>
/// <param name="keyName">键名
/// <param name="keyValue">键值
public void AppConfigSet(string keyName, string keyValue)
{
//由于存在多个Add键值,使得访问appSetting的操作不成功,故注释下面语句,改用新的方式
/*
string xpath = "//add[@key='" + keyName + "']";
XmlDocument document = new XmlDocument();
document.Load(filePath); XmlNode node = document.SelectSingleNode(xpath);
node.Attributes["value"].Value = keyValue;
document.Save(filePath);
*/ XmlDocument document = new XmlDocument();
document.Load(filePath); XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//获得将当前元素的key属性
XmlAttribute attribute = nodes[i].Attributes["key"];
//根据元素的第一个属性来判断当前的元素是不是目标元素
if (attribute != null && (attribute.Value == keyName))
{
attribute = nodes[i].Attributes["value"];
//对目标元素中的第二个属性赋值
if (attribute != null)
{
attribute.Value = keyValue;
break;
}
}
}
document.Save(filePath);
} /// <summary>
/// 读取程序的config文件的键值。
/// 如果键名不存在,返回空
/// </summary>
/// <param name="keyName">键名
/// <returns></returns>
public string AppConfigGet(string keyName)
{
string strReturn = string.Empty;
try
{
XmlDocument document = new XmlDocument();
document.Load(filePath); XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//获得将当前元素的key属性
XmlAttribute attribute = nodes[i].Attributes["key"];
//根据元素的第一个属性来判断当前的元素是不是目标元素
if (attribute != null && (attribute.Value == keyName))
{
attribute = nodes[i].Attributes["value"];
if (attribute != null)
{
strReturn = attribute.Value;
break;
}
}
}
}
catch
{
;
} return strReturn;
} /// <summary>
/// 获取指定键名中的子项的值
/// </summary>
/// <param name="keyName">键名
/// <param name="subKeyName">以分号(;)为分隔符的子项名称
/// <returns>对应子项名称的值(即是=号后面的值)</returns>
public string GetSubValue(string keyName, string subKeyName)
{
string connectionString = AppConfigGet(keyName).ToLower();
string[] item = connectionString.Split(new char[] { ';' }); for (int i = 0; i < item.Length; i++)
{
string itemValue = item[i].ToLower();
if (itemValue.IndexOf(subKeyName.ToLower()) >= 0) //如果含有指定的关键字
{
int startIndex = item[i].IndexOf("="); //等号开始的位置
return item[i].Substring(startIndex + 1); //获取等号后面的值即为Value
}
}
return string.Empty;
} #region 一些常用的配置项属性 /// <summary>
/// 从配置文件获取权限系统链接(配置项HWSecurity的值)
/// </summary>
public string HWSecurity
{
get
{
return AppConfigGet("HWSecurity");
}
} /// <summary>
/// 系统的标识ID(配置项System_ID的值)
/// </summary>
public string System_ID
{
get
{
return AppConfigGet("System_ID");
}
} /// <summary>
/// 应用程序名称(配置项ApplicationName的值)
/// </summary>
public string AppName
{
get
{
return AppConfigGet("ApplicationName");
}
} /// <summary>
/// 软件厂商名称(配置项Manufacturer的值)
/// </summary>
public string Manufacturer
{
get
{
return AppConfigGet("Manufacturer");
}
} /// <summary>
/// 设置程序的config文件的Enterprise Library的数据库链接地址
/// </summary>
/// <param name="keyName">键名
/// <param name="keyValue">键值
public void SetConnectionString(string keyName, string keyValue)
{
XmlDocument document = new XmlDocument();
document.Load(filePath); XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//获得将当前元素的name属性
XmlAttribute att = nodes[i].Attributes["name"];
//根据元素的第一个属性来判断当前的元素是不是目标元素
if (att != null && (att.Value == keyName))
{
att = nodes[i].Attributes["connectionString"];
if (att != null)
{
att.Value = keyValue;
break;
}
}
}
document.Save(filePath);
} /// <summary>
/// 读取程序的config文件Enterprise Library的数据库链接地址
/// </summary>
/// <param name="keyName">键名
/// <returns></returns>
public string GetConnectionString(string keyName)
{
string strReturn = string.Empty;
try
{
XmlDocument document = new XmlDocument();
document.Load(filePath); XmlNodeList nodes = document.GetElementsByTagName("add");
for (int i = 0; i < nodes.Count; i++)
{
//获得将当前元素的key属性
XmlAttribute att = nodes[i].Attributes["name"];
//根据元素的第一个属性来判断当前的元素是不是目标元素
if (att != null && (att.Value == keyName))
{
att = nodes[i].Attributes["connectionString"];
if (att != null)
{
strReturn = att.Value;
break;
}
}
}
}
catch
{ ; } return strReturn;
} /// <summary>
/// 获取数据库配置信息
/// </summary>
/// <param name="keyName">节点名称
/// <returns></returns>
public DatabaseInfo GetDatabaseInfo(string keyName)
{
string connectionString = GetConnectionString(keyName);
return new DatabaseInfo(connectionString);
} /// <summary>
/// 设置数据库配置信息
/// </summary>
/// <param name="keyName">
/// <param name="databaseInfo">
public void SetDatabaseInfo(string keyName, DatabaseInfo databaseInfo)
{
SetConnectionString(keyName, databaseInfo.ConnectionString);
} #endregion
} }

读取配置文件-AppConfig的更多相关文章

  1. 【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 我们在 读取配置文件(一) appsettings.json 中介绍了,如何读取appsettings.json. 但随之产生 ...

  2. ASP.NET Core实现类库项目读取配置文件

    前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...

  3. Asp.NetCore 读取配置文件帮助类

    /// <summary> /// 读取配置文件信息 /// </summary> public class ConfigExtensions { public static ...

  4. Asp.net Core中使用Redis 来保存Session, 读取配置文件

    今天 无意看到Asp.net Core中使用Session ,首先要使用Session就必须添加Microsoft.AspNetCore.Session包,默认Session是只能存去字节,所以如果你 ...

  5. Asp.net Core 和类库读取配置文件信息

    Asp.net Core 和类库读取配置文件信息 看干货请移步至.net core 读取配置文件公共类 首先开一个脑洞,Asp.net core 被使用这么长时间了,但是关于配置文件(json)的读取 ...

  6. 精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件

    精进 Spring Boot 03:Spring Boot 的配置文件和配置管理,以及用三种方式读取配置文件 内容简介:本文介绍 Spring Boot 的配置文件和配置管理,以及介绍了三种读取配置文 ...

  7. 解决IntelliJ IDEA无法读取配置文件的问题

    解决IntelliJ IDEA无法读取配置文件的问题 最近在学Mybatis,按照视频的讲解在项目的某个包里建立配置文件,然后读取配置文件,但是一直提示异常. 读取配置文件的为官方代码: String ...

  8. java-工具类-读取配置文件

    java读取配置文件,当发现文件被修改后则重新加载 package com.zg.config; import java.io.File; import java.io.FileInputStream ...

  9. java 4种方式读取配置文件 + 修改配置文件

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 方式一采用ServletContext读取读取配置文件的realpath然后通过文件流读取出来 方式二采用ResourceB ...

随机推荐

  1. Restful认识和 IK分词器的使用

    什么是Restful风格 Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作. 使用Restful的好处: 透 ...

  2. 201621123023《Java程序设计》第5周学习总结

    一.本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口.interface.comparable.comparator 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一 ...

  3. 微信Netting-QRLJacking分析利用-扫我二维码获取你的账号权限

    首先我们来看一下QRLJacking的实际原理:.攻击者首先进行客户端QR会话,并将登录QR码复制到网络钓鱼网站.“现在,一个精心制作的网络钓鱼页面有一个有效和定期更新的QR码可以被发送给受害者.” ...

  4. xss跨站脚本攻击汇总

  5. mysql编写存储过程(2)

    书接上回. 实例8:if-then -else语句 实例9:case语句: 实例10:循环语句,while ···· end while: 实例11:循环语句,repeat···· end repea ...

  6. 【wepy实战】wepy搭建完整项目

    使用小程序框架wepy,搭建完整实战项目.文章将从项目结构.配置.模块等进行逐步分析和学习. 文章适合小程序开发新手以及有经验的小程序developer,不喜勿喷,不吝赐教! 本文为作者原创,转发请标 ...

  7. margin 和 padding

    一图胜千言!!  参考 CSS padding margin border属性详解

  8. day 42 mysql 数据库(2)

    前情提要: 本节继续学习数据库   一:ddl 创建表 >字段名 >数据类型 >约束规则 >显示建表语句 修改表: 二:数据类型 >数值类型 >小数类型 >字 ...

  9. D04——C语言基础学PYTHON

    C语言基础学习PYTHON——基础学习D04         20180810内容纲要: 1 内置函数 2 装饰器 3 生成器 4 迭代器 5 软件目录结构规范 6 小结 1 内置函数 内置函数方法详 ...

  10. centos7搭建kafka集群-第一篇

    Kafka初识 1.Kafka使用背景 在我们大量使用分布式数据库.分布式计算集群的时候,是否会遇到这样的一些问题: 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位 我想对用户 ...