加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#读写config配置文件的方法

发布时间:2020-12-15 06:14:20 所属栏目:百科 来源:网络整理
导读:如下所示: xml version="1.0" encoding="utf-8" configuration appSettings add key="ServerIP" value="127.0.0.1"/add add key="DataBase" value="WarehouseDB"/add add key="user" value="sa"/add add key="password" value="sa"/add /appSettings/config

如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <appSettings>
  <add key="ServerIP" value="127.0.0.1"></add>
  <add key="DataBase" value="WarehouseDB"></add>
  <add key="user" value="sa"></add>
  <add key="password" value="sa"></add>
 </appSettings>
</configuration>

对config配置文件的读写类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Configuration;
using System.ServiceModel;
using System.ServiceModel.Configuration;

namespace NetUtilityLib
{
  public static class ConfigHelper
  {
    //依据连接串名字connectionName返回数据连接字符串 
    public static string GetConnectionStringsConfig(string connectionName)
    {
      //指定config文件读取
      string file = System.Windows.Forms.Application.ExecutablePath;
      System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(file);
      string connectionString =
        config.ConnectionStrings.ConnectionStrings[connectionName].ConnectionString.ToString();
      return connectionString;
    }

    ///<summary> 
    ///更新连接字符串 
    ///</summary> 
    ///<param name="newName">连接字符串名称</param> 
    ///<param name="newConString">连接字符串内容</param> 
    ///<param name="newProviderName">数据提供程序名称</param> 
    public static void UpdateConnectionStringsConfig(string newName,string newConString,string newProviderName)
    {
      //指定config文件读取
      string file = System.Windows.Forms.Application.ExecutablePath;
      Configuration config = ConfigurationManager.OpenExeConfiguration(file);

      bool exist = false; //记录该连接串是否已经存在 
      //如果要更改的连接串已经存在 
      if (config.ConnectionStrings.ConnectionStrings[newName] != null)
      {
        exist = true;
      }
      // 如果连接串已存在,首先删除它 
      if (exist)
      {
        config.ConnectionStrings.ConnectionStrings.Remove(newName);
      }
      //新建一个连接字符串实例 
      ConnectionStringSettings mySettings =
        new ConnectionStringSettings(newName,newConString,newProviderName);
      // 将新的连接串添加到配置文件中. 
      config.ConnectionStrings.ConnectionStrings.Add(mySettings);
      // 保存对配置文件所作的更改 
      config.Save(ConfigurationSaveMode.Modified);
      // 强制重新载入配置文件的ConnectionStrings配置节 
      ConfigurationManager.RefreshSection("ConnectionStrings");
    }

    ///<summary> 
    ///返回*.exe.config文件中appSettings配置节的value项 
    ///</summary> 
    ///<param name="strKey"></param> 
    ///<returns></returns> 
    public static string GetAppConfig(string strKey)
    {
      string file = System.Windows.Forms.Application.ExecutablePath;
      Configuration config = ConfigurationManager.OpenExeConfiguration(file);
      foreach (string key in config.AppSettings.Settings.AllKeys)
      {
        if (key == strKey)
        {
          return config.AppSettings.Settings[strKey].Value.ToString();
        }
      }
      return null;
    }

    ///<summary> 
    ///在*.exe.config文件中appSettings配置节增加一对键值对 
    ///</summary> 
    ///<param name="newKey"></param> 
    ///<param name="newValue"></param> 
    public static void UpdateAppConfig(string newKey,string newValue)
    {
      string file = System.Windows.Forms.Application.ExecutablePath;
      Configuration config = ConfigurationManager.OpenExeConfiguration(file);
      bool exist = false;
      foreach (string key in config.AppSettings.Settings.AllKeys)
      {
        if (key == newKey)
        {
          exist = true;
        }
      }
      if (exist)
      {
        config.AppSettings.Settings.Remove(newKey);
      }
      config.AppSettings.Settings.Add(newKey,newValue);
      config.Save(ConfigurationSaveMode.Modified);
      ConfigurationManager.RefreshSection("appSettings");
    }

    // 修改system.serviceModel下所有服务终结点的IP地址
    public static void UpdateServiceModelConfig(string configPath,string serverIP)
    {
      Configuration config = ConfigurationManager.OpenExeConfiguration(configPath);
      ConfigurationSectionGroup sec = config.SectionGroups["system.serviceModel"];
      ServiceModelSectionGroup serviceModelSectionGroup = sec as ServiceModelSectionGroup;
      ClientSection clientSection = serviceModelSectionGroup.Client;
      foreach (ChannelEndpointElement item in clientSection.Endpoints)
      {
        string pattern = @"bd{1,3}.d{1,3}b";
        string address = item.Address.ToString();
        string replacement = string.Format("{0}",serverIP);
        address = Regex.Replace(address,pattern,replacement);
        item.Address = new Uri(address);
      }

      config.Save(ConfigurationSaveMode.Modified);
      ConfigurationManager.RefreshSection("system.serviceModel");
    }

    // 修改applicationSettings中App.Properties.Settings中服务的IP地址
    public static void UpdateConfig(string configPath,string serverIP)
    {
      Configuration config = ConfigurationManager.OpenExeConfiguration(configPath);
      ConfigurationSectionGroup sec = config.SectionGroups["applicationSettings"];
      ConfigurationSection configSection = sec.Sections["DataService.Properties.Settings"];
      ClientSettingsSection clientSettingsSection = configSection as ClientSettingsSection;
      if (clientSettingsSection != null)
      {
        SettingElement element1 = clientSettingsSection.Settings.Get("DataService_SystemManagerWS_SystemManagerWS");
        if (element1 != null)
        {
          clientSettingsSection.Settings.Remove(element1);
          string oldValue = element1.Value.ValueXml.InnerXml;
          element1.Value.ValueXml.InnerXml = GetNewIP(oldValue,serverIP);
          clientSettingsSection.Settings.Add(element1);
        }

        SettingElement element2 = clientSettingsSection.Settings.Get("DataService_EquipManagerWS_EquipManagerWS");
        if (element2 != null)
        {
          clientSettingsSection.Settings.Remove(element2);
          string oldValue = element2.Value.ValueXml.InnerXml;
          element2.Value.ValueXml.InnerXml = GetNewIP(oldValue,serverIP);
          clientSettingsSection.Settings.Add(element2);
        }
      }
      config.Save(ConfigurationSaveMode.Modified);
      ConfigurationManager.RefreshSection("applicationSettings");
    }

    private static string GetNewIP(string oldValue,string serverIP)
    {
      string pattern = @"bd{1,3}b";
      string replacement = string.Format("{0}",serverIP);
      string newvalue = Regex.Replace(oldValue,replacement);
      return newvalue;
    }
  }
}

测试代码如下:

class Program
  {
    static void Main(string[] args)
    {
      try
      {
        //string file = System.Windows.Forms.Application.ExecutablePath + ".config";
        //string file1 = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
        string serverIP = ConfigHelper.GetAppConfig("ServerIP");
        string db = ConfigHelper.GetAppConfig("DataBase");
        string user = ConfigHelper.GetAppConfig("user");
        string password = ConfigHelper.GetAppConfig("password");

        Console.WriteLine(serverIP);
        Console.WriteLine(db);
        Console.WriteLine(user);
        Console.WriteLine(password);

        ConfigHelper.UpdateAppConfig("ServerIP","192.168.1.11");
        string newIP = ConfigHelper.GetAppConfig("ServerIP");
        Console.WriteLine(newIP);

        Console.ReadKey();
      }
      catch (Exception ex)
      {
        Console.WriteLine(ex.Message);
      }
    }
  }

以上这篇C#读写config配置文件的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程小技巧。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读