配置文件相关的代码

1、配置文件监听

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.IO;

namespace CSharpStudy
{
    public sealed class ConfigMonitor
    {
        /// <summary>
        /// file path
        /// </summary>
        private static string filePath = string.Empty;

        /// <summary>
        /// file map
        /// </summary>
        private static ExeConfigurationFileMap configFileMap;

        /// <summary>
        /// constructor
        /// </summary>
        static ConfigMonitor()
        {
            Console.WriteLine("constructor...");
            MonitorConfigFile();
            InitConfigInfo();
        }

        /// <summary>
        /// after change config delegate
        /// </summary>
        public delegate void AfterConfigModifyEvent();

        /// <summary>
        /// after change config event
        /// </summary>
        public static event AfterConfigModifyEvent afterConfigModifyEvent;

        /// <summary>
        /// config object
        /// </summary>
        public static Configuration Config
        {
            get;
            set;
        }

        /// <summary>
        /// monitor config file
        /// </summary>
        public static void MonitorConfigFile()
        {
            Console.WriteLine("MonitorConfigFile...");
            // don‘t throw exception
            try
            {
                FileSystemWatcher fileWatcher = new FileSystemWatcher();
                fileWatcher.Path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                fileWatcher.Filter = "ParamSettings.config";

                // add event handlers
                fileWatcher.Changed += new FileSystemEventHandler(OnChanged);
                fileWatcher.Created += new FileSystemEventHandler(OnChanged);
                fileWatcher.Deleted += new FileSystemEventHandler(OnChanged);
                fileWatcher.Renamed += new RenamedEventHandler(OnChanged);

                fileWatcher.EnableRaisingEvents = true;
            }
            catch
            {
            }
        }

        public static void OnChanged(object source, FileSystemEventArgs e)
        {
            InitConfigInfo();
            RaiseEvent();
        }

        /// <summary>
        /// init all config info
        /// </summary>
        public static void InitConfigInfo()
        {
            Console.WriteLine("InitConfigInfo...");

            try
            {
                // don‘t throw exception
                filePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\ParamSettings.config";
                configFileMap = new ExeConfigurationFileMap();
                configFileMap.ExeConfigFilename = filePath;
                Config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
            }
            catch
            {
            }
        }

        /// <summary>
        /// raise event
        /// </summary>
        private static void RaiseEvent()
        {
            Console.WriteLine("RaiseEvent...");

            if (afterConfigModifyEvent != null)
            {
                afterConfigModifyEvent();
            }
        }
    }
}

2、SettingsFactory

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CSharpStudy
{
    public class SettingsFactory
    {
        static SettingsFactory()
        {
            ConfigMonitor.MonitorConfigFile();
        }

        public static string ApplicationName
        {
            get
            {
                return GetAppSetting("ApplicationName");
            }
        }

        private static string GetAppSetting(string key)
        {
            return ConfigMonitor.Config.AppSettings.Settings[key].Value;
        }
    }
}

3、测试代码

     public static void TestConfigFile()
        {
            while (true)
            {
                string str = Console.ReadLine();
                if (str == "-1")
                {
                    break;
                }

                Console.WriteLine(SettingsFactory.ApplicationName);
            }
        }

4、运行截图

4.1 初始化

说明:

  在输入回车后,打印SettingsFactory.ApplicationName信息,

  第一、SettingsFactory构造函数初始化

  (1)、ConfigMonitor构造函数初始化,执行构造函数里面的方法

    打印:

    contructor...

    MonitorConfigFile...

     InitConfigInfo...

  (2)、执行ConfigMonitor.MonitorConfigFile方法

    打印:MonitorConfigFile...

    第二、执行SettingsFactory.ApplicationName方法,打印:CSharpStudy

4.2 使用值

  

  说明:再输入一次回车,结果打印:CSharpStudy。静态构造器,只在第一次使用该类的时候进行初始化。

4.3 程序运行时修改配置文件

找到项目所在目录下的:bin\Debug\ParamSettings.config配置文件,

将ApplicationName的Value修改为:测试项目

执行了四次OnChanged方法。

输入回车后

5、配置文件ParamSettings.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="ApplicationName" value="CSharpStudy"/>
  </appSettings>
</configuration>
时间: 2024-08-01 06:43:30

配置文件相关的代码的相关文章

uC/OS-II应用程序相关的代码

/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel**                     

WordPress作者的相关函数调用代码

WordPress作者的相关函数调用代码,本文参考的是WordPress中文版的维基.网上这样的文章有很多,但是总是不详细或者是有错误,这里的函数是我们经常在使用中要搜索的文章,贴出来给大家了参考. <?php the_author(); ?> 显示文章的作者 <?php the_author_description(); ?> 显示文章作者的描述(作者个人资料中的描述) <?php the_author_login(); ?> 显示文章作者的登录名 <?php

python字符串格式化输出及相关操作代码举例

字符串的格式化 Python 支持格式化字符串的输出 .尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中.在   Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法. 在python中格式化输出字符串通用的形式为: 格式标记字符串 % 要输出的值组 其中,左边部分的"格式标记字符串"可以完全和c中的一致.右边的"值组"如果有两个及以上的值则需要用小括号括起来,中间用逗号隔开. 重点来看左

Unity3D 相关项目代码

一.Application.PresistentDataPath 注意最后面是没有/的 public static string PresistentDataPathForEditor = "C:/Users/Administrator/AppData/LocalLow/DefaultCompany/工程名"; public static string PresistentDataPathForAndroid = "/mnt/sdcard/Android/data/包名/fi

dljd_011_jdbc再次封装工具类_把数据库的相关信息写到配置文件中,减低代码的耦合度

一.将连接数据库所需的相关信息写入到配置文件.通过读取配置文件来获取数据库的相关信息 package edu.aeon.aeonutils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import

配置文件相关

.NET中的配置文件App.config的读取和写入需要引用System.Configuration,若读取WCF相关配置需要System.ServiceModel.Configuration. 一.自定义ConfigurationSection 继承ConfigurationSection,并为每一个成员使用标签ConfigurationProperty.IsRequired=true表示必须赋值,否则会返回异常.通过DefaultValue设置默认值. namespace ConsoleAp

hibernate配置文件、Java代码与数据库之间的转换

此贴适合初学者,技术大脑请绕道! 一.配置文件 第一步:建立项目工程,以hibernate01为例 第二步:点击项目名称-->Myeclipse--> Project Facets[Capabilities]-->Install Hibernate Facet-->yes 出现下图,选择Target runtime 选择next 包建立后next  配置文件完成 二.生成数据库表(在一的基础上完成) 创建所需要的类和配置文件 例如:    创建包 Test 点击运行 数据表建立成功

NGINX----源码阅读---数据结构---配置文件相关

1 typedef struct { 2 ngx_file_t file; 3 ngx_buf_t *buffer; 4 ngx_buf_t *dump; 5 ngx_uint_t line; 6 } ngx_conf_file_t; core/ngx_conf_file.h buffer:配置文件缓存,在配置文件解析时提供缓存作用. dump: line:当前配置文件解析的行数 file:配置文件的相关信息: core/ngx_file.h struct ngx_file_s { //ngin

Nginx介绍及配置文件相关

Ngingx的特点 (1)模块化设计,较好的扩展性 (2)高可靠性 master(控制)-->worker (3)较低的内存消耗 10000个keep-alive连接在Nginx仅消耗2.5M (4)支持热部署 不停机而更新配置文件.更换日志文件.更新服务器程序版本 基本功能: 静态资源的web服务器,能缓存打开的文件描述符 http,smtp,pop3协议的反向代理服务器,缓存,负载均衡 支持fastCGI(fpm) 模块化,非DOS机制,重新编译Nginx,过滤器zip,SSI及图像大小调整