翼度科技»论坛 编程开发 .net 查看内容

在Winform中动态读写app.config文件

9

主题

9

帖子

27

积分

新手上路

Rank: 1

积分
27
在Winform中动态读写app.config文件

https://blog.csdn.net/kingmax54212008/article/details/38987277?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-38987277-blog-82746084.235%5Ev36%5Epc_relevant_default_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-38987277-blog-82746084.235%5Ev36%5Epc_relevant_default_base3&utm_relevant_index=12
1、  首先需要在项目中引用:System.Configuration
2、  通过OpenExeConfiguration()这个方法来对配置文件进行操作
     若当前项目的配置文件如下:


  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

 
需要对上面appSettings的键值作修改,如下代码所示:


  •  string path = Application.StartupPath + "\\ASSEMLY.exe";
  •  Configuration config = ConfigurationManager.OpenExeConfiguration(path);
  •  config.AppSettings.Settings.Clear();
  •   
  •  config.AppSettings.Settings.Add("DataSource", this.DataSource);
  •  config.AppSettings.Settings.Add("InitialCatalog", this.InitialCatalog);
  •  config.AppSettings.Settings.Add("UserId", this.UserId);
  •  config.AppSettings.Settings.Add("Password", this.DePassword);
  •  config.AppSettings.Settings.Add("ConnectTimeout", this.ConnectTimeout.ToString());
  •   
  •  // 保存对配置文件所作的更改
  •  config.Save(ConfigurationSaveMode.Modified);
  •  // 强制重新载入配置文件的ConnectionStrings配置节
  •  ConfigurationManager.RefreshSection("appSettings");

 
  其中它是不能直接修改健值的,是在修改之前要删除该键值,然后重新添加
  同是,上面的只是对AppSettings进行操作,其实也可以对ConnectionStrings、SectionGroups、Sections进行操作
 
读取所有的AppSettings的值
 
StringBuilder str = new StringBuilder();
str.Append("用户名webservices地址webservices方法名称");
AppSettingsReader reader =
new AppSettingsReader();

NameValueCollection appStgs =
ConfigurationManager.AppSettings;
string[] names =
ConfigurationManager.AppSettings.AllKeys;
String value = String.Empty;
for (int i = 0; i < appStgs.Count; i++)
{

string key = names;
if (key.IndexOf("WebSiteUser") >= 0)
{
value = (String)reader.GetValue(key, value.GetType());
string[] strValue = value.Split(',');
string webservices = strValue[0];
string method = strValue[1];
str.Append("
" + key.Replace("WebSiteUser", "") + "" + webservices + "" + method + "");
}
}
str.Append("");
ViewData["ListWebSiteUser"] = str;
return View();
Winform—C#读写config配置文件
现在FrameWork2.0以上使用的是:ConfigurationManager或WebConfigurationManager。并且AppSettings属性是只读的,并不支持修改属性值.
一、如何使用ConfigurationManager?
1、添加引用:添加System.configguration

2、引用空间

3、config配置文件配置节
常用配置节:
(1)普通配置节
 
  
 
(2)数据源配置节

  

(3)自定义配置节

 
 
二、config文件读写
1、依据连接串名字connectionName返回数据连接字符串  
  1. //依据连接串名字connectionName返回数据连接字符串  
  2.         public static string GetConnectionStringsConfig(string connectionName)
  3.         {
  4.             //指定config文件读取
  5.             string file = System.Windows.Forms.Application.ExecutablePath;
  6.             System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(file);
  7.             string connectionString =
  8.                 config.ConnectionStrings.ConnectionStrings[connectionName].ConnectionString.ToString();
  9.             return connectionString;
  10.         }
复制代码

2、更新连接字符串  
  1. ///<summary>
  2.         ///更新连接字符串  
  3.         ///</summary>
  4.         ///<param name="newName">连接字符串名称</param>
  5.         ///<param name="newConString">连接字符串内容</param>
  6.         ///<param name="newProviderName">数据提供程序名称</param>
  7.         public static void UpdateConnectionStringsConfig(string newName, string newConString, string newProviderName)
  8.         {
  9.             //指定config文件读取
  10.             string file = System.Windows.Forms.Application.ExecutablePath;
  11.             Configuration config = ConfigurationManager.OpenExeConfiguration(file);
  12.             bool exist = false; //记录该连接串是否已经存在  
  13.             //如果要更改的连接串已经存在  
  14.             if (config.ConnectionStrings.ConnectionStrings[newName] != null)
  15.             {
  16.                 exist = true;
  17.             }
  18.             // 如果连接串已存在,首先删除它  
  19.             if (exist)
  20.             {
  21.                 config.ConnectionStrings.ConnectionStrings.Remove(newName);
  22.             }
  23.             //新建一个连接字符串实例  
  24.             ConnectionStringSettings mySettings =
  25.                 new ConnectionStringSettings(newName, newConString, newProviderName);
  26.             // 将新的连接串添加到配置文件中.  
  27.             config.ConnectionStrings.ConnectionStrings.Add(mySettings);
  28.             // 保存对配置文件所作的更改  
  29.             config.Save(ConfigurationSaveMode.Modified);
  30.             // 强制重新载入配置文件的ConnectionStrings配置节  
  31.             ConfigurationManager.RefreshSection("connectionStrings");
  32.         }
复制代码

3、返回*.exe.config文件中appSettings配置节的value项  
  1. ///<summary>
  2.         ///返回*.exe.config文件中appSettings配置节的value项  
  3.         ///</summary>
  4.         ///<param name="strKey"></param>
  5.         ///<returns></returns>
  6.         public static string GetAppConfig(string strKey)
  7.         {
  8.             string file = System.Windows.Forms.Application.ExecutablePath;
  9.             Configuration config = ConfigurationManager.OpenExeConfiguration(file);
  10.             foreach (string key in config.AppSettings.Settings.AllKeys)
  11.             {
  12.                 if (key == strKey)
  13.                 {
  14.                     return config.AppSettings.Settings[strKey].Value.ToString();
  15.                 }
  16.             }
  17.             return null;
  18.         }
复制代码

4、在*.exe.config文件中appSettings配置节增加一对键值对  
  1. ///<summary>  
  2.         ///在*.exe.config文件中appSettings配置节增加一对键值对  
  3.         ///</summary>  
  4.         ///<param name="newKey"></param>  
  5.         ///<param name="newValue"></param>  
  6.         public static void UpdateAppConfig(string newKey, string newValue)
  7.         {
  8.             string file = System.Windows.Forms.Application.ExecutablePath;
  9.             Configuration config = ConfigurationManager.OpenExeConfiguration(file);
  10.             bool exist = false;
  11.             foreach (string key in config.AppSettings.Settings.AllKeys)
  12.             {
  13.                 if (key == newKey)
  14.                 {
  15.                     exist = true;
  16.                 }
  17.             }
  18.             if (exist)
  19.             {
  20.                 config.AppSettings.Settings.Remove(newKey);
  21.             }
  22.             config.AppSettings.Settings.Add(newKey, newValue);
  23.             config.Save(ConfigurationSaveMode.Modified);
  24.             ConfigurationManager.RefreshSection("appSettings");
  25.         }
复制代码

5、修改IP地址
  1. // 修改system.serviceModel下所有服务终结点的IP地址
  2.         public static void UpdateServiceModelConfig(string configPath, string serverIP)
  3.         {
  4.             Configuration config = ConfigurationManager.OpenExeConfiguration(configPath);
  5.             ConfigurationSectionGroup sec = config.SectionGroups["system.serviceModel"];
  6.             ServiceModelSectionGroup serviceModelSectionGroup = sec as ServiceModelSectionGroup;
  7.             ClientSection clientSection = serviceModelSectionGroup.Client;
  8.             foreach (ChannelEndpointElement item in clientSection.Endpoints)
  9.             {
  10.                 string pattern = @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b";
  11.                 string address = item.Address.ToString();
  12.                 string replacement = string.Format("{0}", serverIP);
  13.                 address = Regex.Replace(address, pattern, replacement);
  14.                 item.Address = new Uri(address);
  15.             }
  16.             config.Save(ConfigurationSaveMode.Modified);
  17.             ConfigurationManager.RefreshSection("system.serviceModel");
  18.         }
  19.         // 修改applicationSettings中App.Properties.Settings中服务的IP地址
  20.         public static void UpdateConfig(string configPath, string serverIP)
  21.         {
  22.             Configuration config = ConfigurationManager.OpenExeConfiguration(configPath);
  23.             ConfigurationSectionGroup sec = config.SectionGroups["applicationSettings"];
  24.             ConfigurationSection configSection = sec.Sections["DataService.Properties.Settings"];
  25.             ClientSettingsSection clientSettingsSection = configSection as ClientSettingsSection;
  26.             if (clientSettingsSection != null)
  27.             {
  28.                 SettingElement element1 = clientSettingsSection.Settings.Get("DataService_SystemManagerWS_SystemManagerWS");
  29.                 if (element1 != null)
  30.                 {
  31.                     clientSettingsSection.Settings.Remove(element1);
  32.                     string oldValue = element1.Value.ValueXml.InnerXml;
  33.                     element1.Value.ValueXml.InnerXml = GetNewIP(oldValue, serverIP);
  34.                     clientSettingsSection.Settings.Add(element1);
  35.                 }
  36.                 SettingElement element2 = clientSettingsSection.Settings.Get("DataService_EquipManagerWS_EquipManagerWS");
  37.                 if (element2 != null)
  38.                 {
  39.                     clientSettingsSection.Settings.Remove(element2);
  40.                     string oldValue = element2.Value.ValueXml.InnerXml;
  41.                     element2.Value.ValueXml.InnerXml = GetNewIP(oldValue, serverIP);
  42.                     clientSettingsSection.Settings.Add(element2);
  43.                 }
  44.             }
  45.             config.Save(ConfigurationSaveMode.Modified);
  46.             ConfigurationManager.RefreshSection("applicationSettings");
  47.         }
  48.         private static string GetNewIP(string oldValue, string serverIP)
  49.         {
  50.             string pattern = @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b";
  51.             string replacement = string.Format("{0}", serverIP);
  52.             string newvalue = Regex.Replace(oldValue, pattern, replacement);
  53.             return newvalue;
  54.         }
复制代码
修改IP地址
 
config 读写方法
  1. using System.Configuration;
  2. //省略其他代码
  3. public SalesOrderData()
  4.         {
  5.             string str = "";
  6.             str = ConfigurationManager.ConnectionStrings["kyd"].ToString();
  7.             conn = new SqlConnection(str);
  8.             cmd = conn.CreateCommand();
  9.         }
复制代码

 实际应用:
1、获取配置节的值
button1 点击获取配置节指定key的value值
button2 点击获取配置节指定name的connectionString值



结果为:

2、修改配置节的值
button1 点击获取配置节指定key的value值
button2 点击修改配置节指定key的value值为文本框的值
button3 点击获取配置节指定key新的value值



结果为:
 

此时配置文件key1的value值为,获取key值仍为修改前的值

如何重置为修改前的值?

如何保存修改后的值?

来源:https://www.cnblogs.com/zkwarrior/archive/2023/05/30/17442131.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具