.Net中利用config文件来保存信息

来源:互联网 发布:方可软件官网 编辑:程序博客网 时间:2024/05/16 02:21

前言:     

        在做一些项目时,往往会有站点的一些配置信息需要保存,比如站点名称,电话,联系人,邮箱这些等等,又因为此信息不经常更新,而且是单一的,所以放入数据库中会感觉占用了不必要的一些资源。所以就会想到这些信息放入文件中来保存。下面是我的一个例子,分享给大家。


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技术交流群.Net技术交流


0 0
原创粉丝点击