首页 > 代码库 > .Net中利用config文件来保存信息

.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=http://www.mamicode.com/"/xmlConfig/site.config"/>>

7.所有都完工了,我们现在需要在页面上填入来保存这些信息了。创建你自己的编辑信息文件,也就是aspx页面。

名称自己定,前台的我就不展示了,就是些输入框,我来展示我后台的编辑代码。

7.1这是显示信息方法

   /// <summary>
    /// 显示信息
    /// </summary>
    private void ShowInfo()
    {
       //前面 我已经定义好了一个实体对象_mTSysSet
        _mTSysSet  = _bTSysSet.loadConfig(Utils.GetXmlMapPath("Configpath"));
         // hidden.Value = http://www.mamicode.com/_mTSysSet.ID.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技术交流


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