C#自定义配置文件,自定义键值对的配置文件,读取自定义的项值,配置值支持特殊符号

读取配置文件工具类

//功用:读取配置文件值
//创建时间:2022-1-4 16:14:35
 
using System;
using System.IO;
using System.Text.RegularExpressions;

namespace WebSiteMonitor
{
    /// 
    /// 读取配置文件sysdata.ini
    /// 
    internal static class ConfigReader
    {
        private static readonly string configContent = null;

        static ConfigReader()
        {
            //读取自定义配置文件 sysData.ini
            string fileConfig = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sysdata.ini");

            configContent = File.ReadAllText(fileConfig);

            //移除#开头的所有行, 去掉注释行
            Regex regular = new Regex("^\\s*#\\s*.*", RegexOptions.Multiline);
            configContent = regular.Replace(configContent, "");

            //移除空白行
            Regex regular2 = new Regex("^\\s*", RegexOptions.Multiline);
            configContent = regular2.Replace(configContent, "");
            
        }

        /// 
        /// 读取配置文件sysData.ini节点的值
        /// 
        /// 节点名称
        /// 返回节点值
        public static string GetConfigValue(string configName)
        {
            //解析配置
            //Regex regular3 = new Regex($"\\s*({configName})\\s+.*");
            Regex regular8 = new Regex($"\\b({configName})\\b\\s+.*");
            string nodeValue = regular8.Match(configContent).Value;

            //获取值移除空格
            Regex regex4 = new Regex(configName, RegexOptions.IgnoreCase);
            nodeValue = regex4.Replace(nodeValue, "");
            return nodeValue.Trim();
        }


        /// 
        /// 获取列表配置项
        /// 
        /// 配置项名称
        /// 返回list字符串集合
        public static ReadOnlySpan<string> GetConfigList(string configName)
        {
            string nodeValue = String.Empty;
            try
            {
                //Regex regular5 = new Regex($"(?<=({configName})\\s+\\[)(.*\\n)*(?=])");

                //(?<=\b(receive_email_arr)\s+\[)(.*\n)*(?=])
                Regex regular5 = new Regex($"(?<=\\b({configName})\\s+\\[)(.*\\n)*(?=])");
                string txt = configContent.Substring(configContent.IndexOf(configName));
                txt = txt.Substring(0, txt.IndexOf("]") + 1);

                nodeValue = regular5.Match(txt).Value;
                nodeValue = nodeValue.Trim();
           
                //return nodeValue.Split("\r\n",StringSplitOptions.RemoveEmptyEntries).ToList();
                var list = nodeValue.Split(System.Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
           
                return new ReadOnlySpan<string>(list);
            }
            catch (Exception ex)
            {
                throw new Exception("读取数组配置异常");
            }
        }

        /// 
        /// 读取似xml节点以Long_Text.开头配置里面的多行字符串
        /// 
        /// Long_Text.节点名称
        /// 返回xml之间配置的值
        public static string GetXml(string configName)
        {
            //(?<=)[\s\S]*(?=)
            string nodeValue = String.Empty;
            try
            {
                Regex regular5 = new Regex($"(?<={configName}>)[\\s\\S]*(?={configName}>)");
                nodeValue = regular5.Match(configContent).Value;

                return nodeValue.Trim();
            }
            catch (Exception ex)
            {
                throw new Exception("读取xml配置节点{configName}异常");
            }
        }

    }
}



配置文件:
配置文件中,#开头的为注释
注释必须单独一行,不可以和配置值在一行混用
变量名不区分大小写,配置项格式:
变量名称+空格+配置值

sysData.ini配置文件参考

#配置文件,
#格式要求:变量名+空格+变量值
#数组格式规范:符号“[”,“]”必须单独一行
#提示,以#符号开头的行为注释
#配置文件,格式要求,变量名+空格+变量值
#如果是xml格式内容, 比如很多行字符串有换行的情况,要求标签对称,类似html,
#其中CREATE_SQL为节点名称(任意字符串自定义),Long_Text固定,则用如下例子配置的文件
#   
#   配置的值AAA
#   配置的值BBB
#	 配置的值XXX
# 

#数据库连接字符串
#内网测试环境    server=.;192.168.2.122;Database=gdd_tu_shi_fen_gong;uid=sa;pwd=Chuangqi168;
#connctionDb       server=192.168.2.122;Database=gdd_tu_shi_fen_gong;uid=sa;pwd=Chuangqi168;
connctionDb       server=.;Database=mian_yang_form_report;uid=sa;pwd=123456;

#虚拟机测试数据库
#connctionDb       server=.;Database=mian_yang_form_report;uid=sa;pwd=qq@123456;

#生产环境,总体AUAP数据库连接字符串
#connctionDb       server=.;Database=gdd_tu_shi_fen_gong;uid=sa;pwd=@123456qw;

#(测试环境)总体AUAP数据库连接字符串
#AUAP_connctionDb       server=svn.dev.jd;Database=DATABASE223;uid=sa;pwd=cardc_0820;
AUAP_connctionDb       server=.;Database=AnYanYuan;uid=sa;pwd=123456;
#AUAP_connctionDb       server=8.142.114.116;Database=test;uid=sa;pwd=chuangqi168@@;

#(生产环境)总体AUAP数据库连接字符串
#AUAP_connctionDb       server=.;Database=DATABASE223;uid=sa;pwd=cardc_0820;

#普通角色,用于为新用户初始化角色id
role_normal         7259af1bc12f4dc898d80dab36278f02

#系统长名称
web_site_long_name     业务报表系统

#系统短名称
web_site_short_name    业务报表系统

#数据库表,用于保存中文注解列
database						auap

#用户表名,生产环境为 GG_STKMS
#user_info_table_name			 GG_STKMS
user_info_table_name				 AnUser


#管理员账号多个(数组)
sysadmin_account_list
[
whl
admin
]

# 登录用户账号密码验证接口URL
user_check_login_url			http://www.baidu.com

#session存活时间,单位秒
session_live_time     7200

#重置密码
reset_password          aK@789456

#导出excel文件存放的文件夹
export_excel				   export_excel

#word存放位置
export_word					export_word


#验证密码的正则表达式,密码要求必须包含数字,字母,特殊符号,长度八位以上
password_check    (?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^A-Za-z0-9]).{15,50}$

#验证密码不通过提示消息
password_check_msg     密码要求必须包含数字,大小写字母,特殊符号,长度15位以上

#允许上传的图片格式,多个用|分隔
allow_img_type			 .jpg|.jpeg|.jfif|.png|.gif

#允许上传的视频格式,多个用|分隔
allow_video_type					.mp4|.wmv|.rmvb|.mov

#操作类型列表
operate_type_list
[
1=新增角色
2=修改角色
3=删除角色
301=保存角色授权
4=扩展数据库新增字段
5=为auap表字段添加注解
6=修改自定义扩展字段
7=修改auap字段注解
8=主管撤销修改的用户信息
#9=主管修改用户信息
10=用户确认修改消息
11=标记AUAP表是否展示到本系统
12=更新数据到AUAP表字段
13=修改登录用户信息
14=保存配置总体的表哪些作为本系统的菜单
15=保存菜单模块列表页显示列
16=保存自定义表
17=保存列数据源
18=列操作保存
19=保存列关联表设置
20=删除扩展字段
21=修改登录用户角色
22=保存主管修改的用户信息
23=用户自己修改信息
24=用户自己撤销修改
25=主管确认用户修改信息
26=审核填报
27=删除报表
28=保存报表基本信息
29=保存填报字段,系统生成书签
30=保存勾选的填报人
31=终止报表填报
32=填写报表
33=继续填报
34=设置报表可以继续填报
35=删除物理表
36=导出Word
37=导出Excel
]

#数据库创建表sql
<Long_Text.CREATE_SQL>
CREATE TABLE [dbo].[user2](
	[id] [char](32) NOT NULL,
 CONSTRAINT [PK_user2] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
</Long_Text.CREATE_SQL>

#数据库表联查连接字符串sql
<Long_Text.dbConnectionString>
 left join 
opendatasource
(
    'SQLOLEDB',
    'Data Source=192.168.43.196;User ID=sa;Password=123456'
).[test_user].dbo.[user_info] as g
on a.sta_id=g.[user_id]
</Long_Text.dbConnectionString>

调用

string password_check2 = MyConfigReader.GetConfigValue("password_check");

//数据库连接字符串
string connctionDb= MyConfigReader.GetConfigValue("connctionDb");

//读取民族列表
List<string> minzu = MyConfigReader.GetConfigList("minzu");

//读取节点配置的值
string CREATE_SQL= MyConfigReader.GetXml("CREATE_SQL");

你可能感兴趣的:(C#,配置文件,c#,自定义配置文件)