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());
}
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。