.Net中利用config文件来保存信息
前言:
在做一些项目时,往往会有站点的一些配置信息需要保存,比如站点名称,电话,联系人,邮箱这些等等,又因为此信息不经常更新,而且是单一的,所以放入数据库中会感觉占用了不必要的一些资源。所以就会想到这些信息放入文件中来保存。下面是我的一个例子,分享给大家。
1.我的项目是用的三层来写的,我就按照三层的方式给大家呈现一下,为了方便查询,我的文件名命名会加上当前层的首字母,M D B来区分。
首先创建一个Model层的实体 M_T_SysSet,下面的我的实体类中的字段信息。
namespace WitWMS.Model{ //T_SysSet /// <summary> /// 系统基本信息设置 Model /// T_SysSet /// </summary> public class M_T_SysSet { public M_T_SysSet() { } private string _sysname=""; /// <summary> /// 系统名称 /// </summary> public string SysName { get{ return _sysname; } set{ _sysname = value; } } private string _syskeyword = ""; /// <summary> /// 系统关键词 /// </summary> public string SysKeyWord { get{ return _syskeyword; } set{ _syskeyword = value; } } private string _syshot = ""; /// <summary> /// 系统敏感词 /// </summary> public string SysHot { get{ return _syshot; } set{ _syshot = value; } } private string _icp = ""; /// <summary> /// 网站ICP备案号 /// </summary> public string ICP { get{ return _icp; } set{ _icp = value; } } private string _email = ""; /// <summary> /// 邮件地址 /// </summary> public string Email { get{ return _email; } set{ _email = value; } } private string _tel = ""; /// <summary> ///联系电话 /// </summary> public string Tel { get{ return _tel; } set{ _tel = value; } } private string _address = ""; /// <summary> /// 联系地址 /// </summary> public string Address { get{ return _address; } set{ _address = value; } } private int _webstate; /// <summary> /// 网站当前状态 0维护 1开放 /// </summary> public int WebState { get{ return _webstate; } set{ _webstate = value; } } private string _maintain = ""; /// <summary> /// 维护说明 /// </summary> public string MainTain { get{ return _maintain; } set{ _maintain = value; } } private int _photosize; /// <summary> /// 上传图片大小设置 /// </summary> public int PhotoSize { get{ return _photosize; } set{ _photosize = value; } } private string _stopregcause = ""; /// <summary> /// 注册停止原因 /// </summary> public string StopRegCause { get{ return _stopregcause; } set{ _stopregcause = value; } } private int _filesize; /// <summary> /// 附件大小 /// </summary> public int FileSize { get { return _filesize; } set { _filesize = value; } } } }
2.有了model层,肯定还需要DAL层。
namespace WitWMS.DAL { /// <summary> /// 系统基本信息设置 DAL /// </summary> public partial class D_T_SysSet { public D_T_SysSet() { } #region 数据访问类:站内配置,通过配置文件 实现 private static object lockHelper = new object(); /// <summary> /// 读取站点配置文件 /// </summary> public M_T_SysSet loadConfig(string configFilePath) { return (M_T_SysSet)SerializationHelper.Load(typeof(M_T_SysSet), configFilePath); } /// <summary> /// 写入站点配置文件 /// </summary> public M_T_SysSet saveConifg(M_T_SysSet model, string configFilePath) { lock (lockHelper) { SerializationHelper.Save(model, configFilePath); } return model; } #endregion } }
3.BLL层。
namespace WitWMS.BLL { /// <summary> /// 系统基本信息设置 BLL /// </summary> public partial class B_T_SysSet { private readonly D_T_SysSet dal = new D_T_SysSet(); /// <summary> /// 系统基本信息设置 构造函数 /// </summary> public B_T_SysSet(){ } #region 添加通过配置文件 读取配置项 /// <summary> /// 读取配置文件 /// </summary> public M_T_SysSet loadConfig(string configFilePath) { M_T_SysSet model = CacheHelper.Get<M_T_SysSet>("cache_site_config"); if (model == null) { CacheHelper.Insert("cache_site_config", dal.loadConfig(configFilePath), configFilePath); model = CacheHelper.Get<M_T_SysSet>("cache_site_config"); } return model; } /// <summary> /// 读取客户端站点配置信息 /// </summary> public M_T_SysSet loadConfig(string configFilePath, bool isClient) { M_T_SysSet model = CacheHelper.Get<M_T_SysSet>("cache_site_client_config"); if (model == null) { model = dal.loadConfig(configFilePath); CacheHelper.Insert("cache_site_client_config", model, configFilePath); } return model; } /// <summary> /// 保存配置文件 /// </summary> public M_T_SysSet saveConifg(M_T_SysSet model, string configFilePath) { return dal.saveConifg(model, configFilePath); } #endregion } }
4.这里还用到了一些辅助类,我把一些常用的辅助类集中放入了Common类库中,方便管理 。
4.1缓存操作类 CacheHelper
namespace WitWMS.Common { /// <summary> /// 缓存操作类 /// </summary> public class CacheHelper { /// <summary> /// 创建缓存项的文件依赖 /// </summary> /// <param name="key">缓存Key</param> /// <param name="obj">object对象</param> /// <param name="fileName">文件绝对路径</param> public static void Insert(string key, object obj, string fileName) { //创建缓存依赖项 CacheDependency dep = new CacheDependency(fileName); //创建缓存 HttpContext.Current.Cache.Insert(key, obj, dep); } /// <summary> /// 创建缓存项过期 /// </summary> /// <param name="key">缓存Key</param> /// <param name="obj">object对象</param> /// <param name="expires">过期时间(分钟)</param> public static void Insert(string key, object obj, int expires) { HttpContext.Current.Cache.Insert(key, obj, null, Cache.NoAbsoluteExpiration, new TimeSpan(0, expires, 0)); } /// <summary> /// 获取缓存对象 /// </summary> /// <param name="key">缓存Key</param> /// <returns>object对象</returns> public static object Get(string key) { if (string.IsNullOrEmpty(key)) { return null; } return HttpContext.Current.Cache.Get(key); } /// <summary> /// 获取缓存对象 /// </summary> /// <typeparam name="T">T对象</typeparam> /// <param name="key">缓存Key</param> /// <returns></returns> public static T Get<T>(string key) { object obj = Get(key); return obj == null ? default(T) : (T)obj; } } }
4.2序列化与反序列化操作类 SerializationHelper
namespace WitWMS.Common { /// <summary> /// 序列化与反序列化操作 /// </summary> public class SerializationHelper { public SerializationHelper() { } /// <summary> /// 反序列化 /// </summary> /// <param name="type">对象类型</param> /// <param name="filename">文件路径</param> /// <returns></returns> public static object Load(Type type, string filename) { FileStream fs = null; try { // open the stream... fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); XmlSerializer serializer = new XmlSerializer(type); return serializer.Deserialize(fs); } catch (Exception ex) { throw ex; } finally { if (fs != null) { fs.Close(); } } } /// <summary> /// 序列化 /// </summary> /// <param name="obj">对象</param> /// <param name="filename">文件路径</param> public static void Save(object obj, string filename) { FileStream fs = null; // serialize it... try { fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); XmlSerializer serializer = new XmlSerializer(obj.GetType()); serializer.Serialize(fs, obj); } catch (Exception ex) { throw ex; } finally { if (fs != null) { fs.Close(); } } } } }
4.3 Utils类
#region 获得配置文件节点XML文件的绝对路径 public static string GetXmlMapPath(string xmlName) { return GetMapPath(ConfigurationManager.AppSettings[xmlName].ToString()); } #endregion #region 获得当前绝对路径 /// <summary> /// 获得当前绝对路径 /// </summary> /// <param name="strPath">指定的路径</param> /// <returns>绝对路径</returns> public static string GetMapPath(string strPath) { if (strPath.ToLower().StartsWith("http://")) { return strPath; } if (HttpContext.Current != null) { return HttpContext.Current.Server.MapPath(strPath); } else //非web程序引用 { strPath = strPath.Replace("/", "\\"); if (strPath.StartsWith("\\")) { strPath = strPath.Substring(strPath.IndexOf('\\', 1)).TrimStart('\\'); } return System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strPath); } } #endregion
5.我们还需要一个config文件,在你需要的地方创建一个config文件,我创建了一个文件夹,专门放置一些config文件,我的是:xmlConfig/site.config,可以根据自己需要创建。
<?xml version="1.0"?> <M_T_SysSet> </M_T_SysSet>
创建好以后,根节点最好命名成与你的Model层中配置类相同的名称,也是为了方便后期查看修改。
6.做好前面的,我们还需要一步操作,把这个config文件的路径保存在我们的web.config文件中,当然你也可以直接写入你的程序中,不过建议写入web.config中,因为你可能有多个config文件,这样方便管理。
在你的web.config中的appSettings节点中创建。
<appSettings> <add key="Configpath" value="/xmlConfig/site.config"/> </appSettings>
7.所有都完工了,我们现在需要在页面上填入来保存这些信息了。创建你自己的编辑信息文件,也就是aspx页面。
名称自己定,前台的我就不展示了,就是些输入框,我来展示我后台的编辑代码。
7.1这是显示信息方法
/// <summary> /// 显示信息 /// </summary> private void ShowInfo() { //前面 我已经定义好了一个实体对象_mTSysSet _mTSysSet = _bTSysSet.loadConfig(Utils.GetXmlMapPath("Configpath")); // hidden.Value = _mTSysSet.ID.ToString(); sysname.Text = _mTSysSet.SysName; syskeyword.Text = _mTSysSet.SysKeyWord; syshot.Text = _mTSysSet.SysHot; icp.Text = _mTSysSet.ICP; email.Text = _mTSysSet.Email; tel.Text = _mTSysSet.Tel; address.Text = _mTSysSet.Address; webstate.SelectedValue = _mTSysSet.WebState.ToString(); maintain.Text = _mTSysSet.MainTain; photosize.Text = _mTSysSet.PhotoSize.ToString(); filesize.Text = _mTSysSet.FileSize.ToString(); }
7.2这是保存信息方法。
/// <summary> /// 保存配置信息 /// </summary> protected void btnSubmit_Click(object sender, EventArgs e) { _mTSysSet = _bTSysSet.loadConfig(Utils.GetXmlMapPath("Configpath")); try { _mTSysSet.SysName = sysname.Text; _mTSysSet.SysKeyWord = syskeyword.Text; _mTSysSet.SysHot = syshot.Text; _mTSysSet.ICP = icp.Text; _mTSysSet.Email = email.Text; _mTSysSet.Tel = tel.Text; _mTSysSet.Address = address.Text; _mTSysSet.WebState = Convert.ToInt32(webstate.SelectedValue); _mTSysSet.MainTain = maintain.Text; _mTSysSet.PhotoSize = Convert.ToInt32(photosize.Text); _mTSysSet.FileSize = Convert.ToInt32(filesize.Text); _bTSysSet.saveConifg(_mTSysSet, Utils.GetXmlMapPath("Configpath")); JscriptMsg("系统提示:修改系统信息成功啦!", "sys_config.aspx", "Success"); } catch(Exception ex) { JscriptMsg("系统提示:修改系统信息失败啦!", "", "Error"); } }
8.总结
配置文件保存一些不经常修改的站点信息,这样做不用频繁访问数据库去读取一成不变的信息,要知道,数据库连接资源是很宝贵的,频繁占用一个连接资源,却做着一成不变的事情,就是在做无用功,不如把这宝贵的连接资源让给有用的数据访问。
9..Net交流会所
欢迎加入.net技术交流群
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。