欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 常用配置文件 .ini、.config、 json、xml

常用配置文件 .ini、.config、 json、xml

2024/10/25 11:22:14 来源:https://blog.csdn.net/u013400314/article/details/140892894  浏览:    关键词:常用配置文件 .ini、.config、 json、xml

ini

Initialization

INI文件格式是某些平台或软件上的配置文件的非正式标准,以节(section)和键值对(key-val)构成,常用于微软Windows操作系统中。
这种配置文件的文件扩展名多为INI

》》INI文件不支持数据类型,所有的键值对都是字符串类型。

这意味着在读取INI文件时,需要将字符串转换成对应的数据类型,例如整数、浮点数、布尔值等
在这里插入图片描述

[Database]
Server=127.0.0.1
Port=3306
Username=root
Password=xxx
Database=mydb[Logging]
Level=INFO
File=/xxx.log

C#中有很多库可以用来读写Ini文件。以下是一些常用的C# ini库:

ini-parser:ini-parser是一个流行的开源库,可以轻松地读取、写入和修改Ini文件。它支持多个Ini文件的读取和写入,并提供了强大的查询功能。

Nini:Nini是另一个流行的开源Ini库,它提供了一个简单的API来读取和写入Ini文件。它支持多个Ini文件的读取和写入,以及多种Ini文件格式。

SimpleIni:SimpleIni是一个轻量级的Ini库,可以快速读取和写入Ini文件。它支持多个Ini文件的读取和写入,并提供了一些简单的查询功能。

在这里插入图片描述

using IniParser;
using IniParser.Model;// 创建一个 IniData 对象来表示 INI 文件的内容
FileIniDataParser parser = new FileIniDataParser();//========读取===============
IniData data = parser.ReadFile("xxx/file.ini");
// 访问 INI 文件中的配置信息
string value = data["SectionName"]["KeyName"];
Console.WriteLine(value);//========写入===============
// 创建一个新的 IniData 对象,并设置配置信息
IniData newData = new IniData();
newData.Sections.AddSection("SectionName");
newData["SectionName"].AddKey("KeyName", "Value");// 将 IniData 对象写入 INI 文件
parser.WriteFile("xxx/file.ini", newData);//==============更新================
// 读取现有的 INI 文件
IniData data = parser.ReadFile("xxx/file.ini");// 更新配置信息
data["SectionName"]["KeyName"] = "NewValue";// 将更新后的配置写回文件
parser.WriteFile("xxx/file.ini", data);///如删除配置项、删除部分、处理注释等也支持的
自己封装方法读取
using System.IO;
using System.Collections.Generic;public static Dictionary<string, Dictionary<string, string>> ParseIniFile(string filePath)
{Dictionary<string, Dictionary<string, string>> iniData = new Dictionary<string, Dictionary<string, string>>();using (StreamReader reader = new StreamReader(filePath)){string section = "";Dictionary<string, string> sectionData = new Dictionary<string, string>();while (!reader.EndOfStream){string line = reader.ReadLine().Trim();if (line.StartsWith("[") && line.EndsWith("]")){// 开始一个新的节section = line.Substring(1, line.Length - 2);sectionData = new Dictionary<string, string>();iniData[section] = sectionData;}else if (line.Contains("=")){// 解析键值对string[] parts = line.Split('=');string key = parts[0].Trim();string value = parts[1].Trim();sectionData[key] = value;}}}return iniData;
}
Dictionary<string, Dictionary<string, string>> iniData = ParseIniFile("xxx.ini");foreach (KeyValuePair<string, Dictionary<string, string>> section in iniData)
{Console.WriteLine("[{0}]", section.Key);foreach (KeyValuePair<string, string> kvp in section.Value){Console.WriteLine("{0}={1}", kvp.Key, kvp.Value);}Console.WriteLine();
}

用window系统自带读取INI文件中的数据

C#命名空间中没有直接读写INI的类,但在"kernel32.dll"文件中有Win32的API函数–
WritePrivateProfileString()和GetPrivateProfileString(),可操作ini文件。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;namespace xxxx
{public class ReadWriteINI{#region API函数声明/// <summary>/// 写入ini文件/// </summary>/// <param name="section">节点名称</param>/// <param name="key">键</param>/// <param name="val">值</param>/// <param name="filePath">ini路径</param>/// <returns>0失败/其他成功</returns>[DllImport("kernel32")]private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);/// <summary>/// /// </summary>/// <param name="section">节点名称,[]内的段落名</param>/// <param name="key">键</param>/// <param name="def">值(未读取到数据时设置的默认返回值)</param>/// 对应API函数的def参数,它的值由用户指定,是当在配置文件中没有找到具体的Value时,就用def的值来代替。可以为空/// <param name="retVal">读取到的结果值</param>/// <param name="size">读取缓冲区大小</param>/// <param name="filePath">ini配置文件的路径加ini文件名</param>/// <returns>读取到的字节数量</returns>[DllImport("kernel32")]private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);#endregion/// <summary>/// 写INI,添加新节点、键值,及编辑修改键对应的值/// </summary>/// <param name="in_filename">ini配置文件的路径加ini文件名</param>/// <param name="Section">节点名称,[]内的段落名</param>/// <param name="Key">键</param>/// <param name="Value">值</param>public static bool IniFile_SetVal(string in_filename, string Section, string Key, string Value){if (File.Exists(in_filename)){// 调用winapi函数将Key=Value写入Section节点下long len = WritePrivateProfileString(Section, Key, Value, in_filename);if (len == 0){return false;}else{return true;}}else{return true;}}/// <summary>/// 读ini/// </summary>/// <param name="in_filename">ini配置文件的路径加ini文件名</param>/// <param name="Section">节点名称,[]内的段落名</param>/// <param name="Key">键</param>/// <returns></returns>public static string IniFile_GetVal(string in_filename, string Section, string Key){if (File.Exists(in_filename)){// 声明接收的数据StringBuilder builder = new StringBuilder(1024);// 调用winapi函数读取Section节点下Key的值int len = GetPrivateProfileString(Section, Key, "", builder, 1024, in_filename);if (len == 0)return "1";elsereturn (builder.ToString());}elsereturn string.Empty;}}
}
        /// <summary>/// 读取ini文件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button3_Click(object sender, EventArgs e){string pathName = Application.StartupPath + "\\config\\xxx.ini";string resStarter = ReadWriteINI.IniFile_GetVal(pathName, "section名", "key");string[] resInitLine = resStarter.Split(',');for (int ii = 0; ii < resInitLine.Length; ii++){richTextBox2.AppendText(resInitLine[ii] + "\n");}}/// <summary>/// 写入ini文件,新建或编辑/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button4_Click(object sender, EventArgs e){string pathName = Application.StartupPath + "\\xxx.ini";ReadWriteINI.IniFile_SetVal(pathName, "section名", "key名", "值");string[] resInitLine = richTextBox2.Lines;string tempWrite = string.Join(",", resInitLine);tempWrite=tempWrite.Remove(tempWrite.Length-1);ReadWriteINI.IniFile_SetVal(pathName, "section名", "key名", tempWrite);}
INI、

》》INI
在这里插入图片描述
》》xml
在这里插入图片描述
》》》json
在这里插入图片描述
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com