好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解C#如何读写config配置文件

配置文件概述:

应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件的根节点是configuration。我们经常访问的是appSettings,它是由.Net预定义的配置节。我们经常使用的配置文件的架构是客诉下面的形式。先大概有个印象,通过后面的实例会有一个比较清楚的认识。下面的[配置节]可以理解为进行配置一个XML的节点。

对于一个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 = @"\b\d{1,3}\.\d{1,3}\.\d{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 = @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" ;

    string replacement = string .Format( "{0}" , serverIP);

    string newvalue = Regex.Replace(oldValue, pattern, 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);

   }

  }

}


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://HdhCmsTestcnblogs测试数据/luxiaoxun/p/3599341.html

dy("nrwz");

查看更多关于详解C#如何读写config配置文件的详细内容...

  阅读:59次