C# 读写config配置文件

Love朴啾啾 2024-08-27 12:05:02 阅读 63

一、项目默认配置文件

1、app.config

在创建C#项目时,visual studio会默认在项目路径创建一个名为 App.config 的程序集配置文件,其为开发时配置参数的文件,默认记录一些配置信息,当前 .NETFramework 的版本等。

在这里插入图片描述

在这里插入图片描述

2、*.exe.config

在项目编译后,会在根目录(相应 debug 或者 release 文件夹内)生成一个名为 ” 程序名称 .exe.config “ 的配置文件。当 app.config 文件有修改时,会重新复制 app.config 文件内容到 *.exe.config 和 *.vshost.exe.config 文件中,覆盖原始内容。

*.exe.config 文件为程序实际运行时实际操作的配置文件,在程序实际运行时无论怎么更改该配置文件,下一次运行时, *.exe.config 文件都会重新复制 app.config 文件,故该配置文件更改仅用于临时配置信息更改。

在这里插入图片描述

3、*.vshost.exe.config

在项目编译后,会在根目录(相应 debug 或者 release 文件夹内)生成一个名为 ” 程序名称.vshost.exe.config “ 的配置文件。

*.vshost.exe.config 文件为项目调试运行时实际操作的配置文件,在项目调试期间无论怎么更改该配置文件,在下一次运行时, *.vshost.exe.config 文件都会重新复制 app.config 文件,故该配置文件更改仅用于临时配置信息更改。

在这里插入图片描述

二、读写配置文件

1、添加 System.Configuration 程序集文件

系统程序集文件中有能操作 Config 文件的 API库文件,在项目 “引用” 上右键,点击“添加引用” ,打开“引用管理器”窗口。

在这里插入图片描述

在程序集中找到 System.Configuration ,选中后点击确定。将 System.Configuration 文件添加到项目引用中。

在这里插入图片描述

2、Config读取操作类函数

<code>using System;

using System.Collections.Generic;

using System.Configuration;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace FileOperationsDemo

{

public static class ReadWriteConfig

{

#region 在系统配置文件中 读/写配置相关函数

/// <summary>

/// 从 *.exe.config 或 *.vshost.exe.config 文件中读取数据,返回字符串

/// </summary>

/// <param name="Setting_name"></param>code>

/// <returns></returns>

public static String Read_appSetting(String Setting_name)

{

String str = "";

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

//根据Key读取<add>元素的Value

str = config.AppSettings.Settings[Setting_name].Value;

return str;

}

/// <summary>

/// 从 *.exe.config 或 *.vshost.exe.config 文件中读取数据,处理后返回List列表

/// </summary>

/// <param name="Setting_name"></param>code>

/// <returns></returns>

public static List<String> Read_appSetting_List(String Setting_name)

{

String str = "";

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

//根据Key读取<add>元素的Value

str = config.AppSettings.Settings[Setting_name].Value;

string[] tmp = str.Split(',');

List<string> ret_list = new List<string>();

ret_list.Clear();

for (Int32 i = 0; i < tmp.Length; i++)

{

ret_list.Add(tmp[i]);

}

return ret_list;

}

/// <summary>

/// 将配置写入 *.exe.config 或 *.vshost.exe.config 文件

/// </summary>

/// <param name="Setting_name"></param>code>

/// <param name="value"></param>code>

public static void Write_appSetting(String Setting_name, String value)

{

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

config.AppSettings.Settings[Setting_name].Value = value; //写入<add>元素的Value

//一定要记得保存,写不带参数的config.Save()也可以

config.Save(ConfigurationSaveMode.Modified);

刷新,否则程序读取的还是之前的值(可能已装入内存)

System.Configuration.ConfigurationManager.RefreshSection("appSettings");

}

/// <summary>

/// 将配置写入 *.exe.config 或 *.vshost.exe.config 文件

/// </summary>

/// <param name="name"></param>code>

/// <param name="Setting_name"></param>code>

public static void Write_appSetting_List(String name, List<String> Setting_name)

{

String str = "";

for (Int32 i = 0; i < Setting_name.Count - 1; i++)

{

str += Setting_name[i] + ",";

}

str += Setting_name[Setting_name.Count - 1];

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

config.AppSettings.Settings[name].Value = str; //写入<add>元素的Value

//一定要记得保存,写不带参数的config.Save()也可以

config.Save(ConfigurationSaveMode.Modified);

刷新,否则程序读取的还是之前的值(可能已装入内存)

System.Configuration.ConfigurationManager.RefreshSection("appSettings");

}

#endregion

#region appSettings 读/写配置相关函数 根据路径

/// <summary>

/// 从 path 指定文件中读取数据,返回字符串

/// </summary>

/// <param name="path"></param>code>

/// <param name="Setting_name"></param>code>

/// <returns></returns>

public static String Read_appSettingPath(String path, String Setting_name)

{

String str = "";

ExeConfigurationFileMap map = new ExeConfigurationFileMap();

map.ExeConfigFilename = @path;

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

//根据Key读取<add>元素的Value

str = config.AppSettings.Settings[Setting_name].Value;

return str;

}

/// <summary>

/// 从 path 指定文件中读取数据,返回字符串,处理后返回List列表

/// </summary>

/// <param name="path"></param>code>

/// <param name="Setting_name"></param>code>

/// <returns></returns>

public static List<String> Read_appSettingPath_List(String path, String Setting_name)

{

String str = "";

ExeConfigurationFileMap map = new ExeConfigurationFileMap();

map.ExeConfigFilename = @path;

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

//根据Key读取<add>元素的Value

str = config.AppSettings.Settings[Setting_name].Value;

string[] tmp = str.Split(',');

List<string> ret_list = new List<string>();

ret_list.Clear();

for (Int32 i = 0; i < tmp.Length; i++)

{

ret_list.Add(tmp[i]);

}

return ret_list;

}

/// <summary>

/// 将配置写入path路径的.config文件

/// </summary>

/// <param name="path">路径</param>code>

/// <param name="Setting_name">键</param>code>

/// <param name="value">值</param>code>

public static void Write_appSettingPath(String path, String Setting_name, String value)

{

ExeConfigurationFileMap map = new ExeConfigurationFileMap();

map.ExeConfigFilename = @path;

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

config.AppSettings.Settings[Setting_name].Value = value; //写入<add>元素的Value

//一定要记得保存,写不带参数的config.Save()也可以

config.Save(ConfigurationSaveMode.Modified);

刷新,否则程序读取的还是之前的值(可能已装入内存)

System.Configuration.ConfigurationManager.RefreshSection("appSettings");

}

/// <summary>

/// 将配置写入path路径的.config文件

/// </summary>

/// <param name="path">路径</param>code>

/// <param name="name">键</param>code>

/// <param name="Setting_name">值</param>code>

public static void Write_appSettingPath_List(String path, String name, List<String> Setting_name)

{

String str = "";

for (Int32 i = 0; i < Setting_name.Count - 1; i++)

{

str += Setting_name[i] + ",";

}

str += Setting_name[Setting_name.Count - 1];

ExeConfigurationFileMap map = new ExeConfigurationFileMap();

map.ExeConfigFilename = @path;

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

config.AppSettings.Settings[name].Value = str; //写入<add>元素的Value

//一定要记得保存,写不带参数的config.Save()也可以

config.Save(ConfigurationSaveMode.Modified);

刷新,否则程序读取的还是之前的值(可能已装入内存)

System.Configuration.ConfigurationManager.RefreshSection("appSettings");

}

///<summary>

///在path路径的.config文件中增加一对键值对

///</summary>

///<param name="newKey"></param> code>

///<param name="newValue"></param> code>

public static void ADDAppConfig(String path, String newKey, String newValue)

{

ExeConfigurationFileMap map = new ExeConfigurationFileMap();

map.ExeConfigFilename = @path;

//获取Configuration对象

Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);

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");

}

#endregion

}

}

3、使用用例

/// <summary>

/// 读取config文件

/// </summary>

/// <param name="sender"></param>code>

/// <param name="e"></param>code>

private void button5_Click(object sender, EventArgs e)

{

string serialPortCount = ReadWriteConfig.Read_appSetting("serialPortCount");

richTextBox3.AppendText(serialPortCount + "\t\n");

string Constr = ReadWriteConfig.Read_appSettingPath(Application.StartupPath + "\\config\\InitializeConfig.config", "修正器");

richTextBox3.AppendText(Constr + "\t\n");

}

/// <summary>

/// 写入config文件

/// </summary>

/// <param name="sender"></param>code>

/// <param name="e"></param>code>

private void button6_Click(object sender, EventArgs e)

{

ReadWriteConfig.Write_appSetting("serialPortCount", richTextBox3.Text.ToString().Trim());

string path = Application.StartupPath + "\\config\\InitializeConfig.config";

ReadWriteConfig.Write_appSetting("serialPort1", richTextBox3.Lines[0].ToString().Trim());

ReadWriteConfig.Write_appSettingPath(path, "修正器", richTextBox3.Lines[0].ToString().Trim());

ReadWriteConfig.ADDAppConfig(path, "修正器11", richTextBox3.Lines[1].ToString().Trim());

}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。