读取配置文件工具类
//功用:读取配置文件值
//创建时间:2022-1-4 16:14:35
using System;
using System.IO;
using System.Text.RegularExpressions;
namespace WebSiteMonitor
{
/// <summary>
/// 读取配置文件sysdata.ini
/// </summary>
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, "");
}
/// <summary>
/// 读取配置文件sysData.ini节点的值
/// </summary>
/// <param name="configName">节点名称</param>
/// <returns>返回节点值</returns>
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();
}
/// <summary>
/// 获取列表配置项
/// </summary>
/// <param name="configName">配置项名称</param>
/// <returns>返回list字符串集合</returns>
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("读取数组配置异常");
}
}
/// <summary>
/// 读取似xml节点以Long_Text.开头配置里面的多行字符串
/// </summary>
/// <param name="configName">Long_Text.节点名称</param>
/// <returns>返回xml之间配置的值</returns>
public static string GetXml(string configName)
{
//(?<=<Long_Text.wusong>)[\s\S]*(?=</Long_Text.wusong>)
string nodeValue = String.Empty;
try
{
Regex regular5 = new Regex($"(?<=<Long_Text.{configName}>)[\\s\\S]*(?=</Long_Text.{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固定,则用如下例子配置的文件
# <Long_Text.CREATE_SQL>
# 配置的值AAA
# 配置的值BBB
# 配置的值XXX
#</Long_Text.CREATE_SQL>
#数据库连接字符串
#内网测试环境 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");
//读取<Long_Text.CREATE_SQL>节点配置的值
string CREATE_SQL= MyConfigReader.GetXml("CREATE_SQL");