.netcore各种配置文件读取,包含json,xml,environment,commandline,ini等等

10 篇文章 3 订阅

根据读取不同文件可引入不同的包,

在这里插入图片描述
示例代码

 public static void Run(string[] args)
        {

            var keyValueDic = new Dictionary<string, string> { ["Name"] = "Windy", ["Start"] = "2020-5-1", ["End"] = "2020-5-13", };

            var config = new ConfigurationBuilder()
                .AddInMemoryCollection(keyValueDic)
                .Build();

//内存配置读取
            var opt = config.Get<AppSetting>();

            Console.WriteLine(opt.Name);
            Console.WriteLine(opt.Start);
            Console.WriteLine(opt.End);

//Json文件读取
            var configJson = new ConfigurationBuilder()
                .AddJsonFile(@"appsettings.json", true, true).Build();

            Read(configJson.Get<AppSetting>());
///可监视文件内容
            ChangeToken.OnChange(() => configJson.GetReloadToken(), () =>
            {
            //文件内容有变化,重新读取文件内容
                Read(configJson.Get<AppSetting>());
            });

///环境变量读取
            Environment.SetEnvironmentVariable("APP_Name", "demo");
            Environment.SetEnvironmentVariable("APP_Port", "12345");
            var envConfig = new ConfigurationBuilder()
                .AddEnvironmentVariables("APP_")
                .Build();

            Read(envConfig.Get<AppSetting>());
///命令行读取
            var cmdMapp = new Dictionary<string, string>
            {
                ["-n"] = "Name",
                ["-ver"] = "Version"
            };

            var cmdConfig = new ConfigurationBuilder()
                .AddCommandLine(args, cmdMapp)
                .Build();

            Read(cmdConfig.Get<AppSetting>());

//xml 文件读取
            var xmlConfig = new ConfigurationBuilder()
                .AddXmlFile(@"App.config")
                .Build();

            var a = xmlConfig.GetSection("AppConfigDemo");
            var b = xmlConfig.GetSection("AppConfigDemo");
            var flag = a == b;
            Read(a.Get<AppSetting>());
        }

        static void Read(AppSetting opt)
        {
            if (opt == null)
            {
                return;
            }
            Console.WriteLine("=========");

            Console.WriteLine(opt.Name);
            Console.WriteLine(opt.Start);
            Console.WriteLine(opt.End);
            Console.WriteLine(opt.Port);
            Console.WriteLine(opt.Verstion);
        }
        class AppSetting
        {
            public string Name { set; get; }
            public DateTime Start { set; get; }
            public DateTime End { set; get; }

            public int Port { set; get; }
            public string Verstion { set; get; }
        }

监视物理磁盘文件,文件如果有修改,重新读取文件内容

 public static void Run()
        {
            var service = new ServiceCollection()
                .AddSingleton<IFileProvider>(new PhysicalFileProvider(@"E:\dmz-sYSTEM"))
                .AddSingleton<FimgMgr>().BuildServiceProvider();

            service.GetService<FimgMgr>()?.WatchFile("abc.txt").Wait();

            Console.ReadLine();
        }

        class FimgMgr
        {
            readonly IFileProvider fileProvider;
            public FimgMgr(IFileProvider fp)
            {
                fileProvider = fp;
            }

            internal async Task WatchFile(string file)
            {
                var d = await ReadFile(file);
                Console.WriteLine(d);
                ChangeToken.OnChange(() => fileProvider.Watch(file), async () =>
                  {
                      var d = await ReadFile(file);
                      Console.WriteLine(d);
                  });

            }

            async Task<string> ReadFile(string file)
            {
                var d = fileProvider.GetFileInfo(file);
                if (d.Exists)
                {
                    using var stream = d.CreateReadStream();
                    using StreamReader sr = new StreamReader(stream);
                    return await sr.ReadToEndAsync();
                }
                return null;
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值