c#实现ini文件读写类分享
简介
在Windows系统中,ini文件长期以来一直是用来存储应用程序的配置参数的一种方法。尽管现在INI文件不再是首选方式,但是INI文件仍然很有用,因为它们简单并且容易编辑。
本文将分享如何使用C#实现INI文件读写功能的类。
实现
首先,我们需要创建一个新的INI文件读写类。以下是这个类的基本结构简述:
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
public class IniFile
{
private string _path;
private Dictionary<string, Dictionary<string, string>> _iniData;
public IniFile(string path)
{
_path = path;
_iniData = new Dictionary<string, Dictionary<string, string>>();
}
// Ini文件读取函数
[DllImport("kernel32")]
private static extern long GetPrivateProfileString(
string section,
string key,
string def,
StringBuilder retVal,
int size,
string filePath);
// Ini文件写入函数
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(
string section,
string key,
string val,
string filePath);
}
如上代码所示,这个类包含了两个核心方法:GetPrivateProfileString
和WritePrivateProfileString
,分别用于读取和写入INI文件。
接下来,我们将需要实现两个重要的公共方法:ReadIni
和WriteIni
,分别用于使用IniFile类读取和写入INI文件。
public void ReadIni()
{
// 读取INI文件的所有段(section)
var sections = new List<string>();
StringBuilder buffer = new StringBuilder(1024);
GetPrivateProfileString(null, null, null, buffer, buffer.Capacity, _path);
foreach (var s in buffer.ToString().Split('\0'))
{
if (!string.IsNullOrEmpty(s))
{
sections.Add(s);
}
}
// 读取INI文件中每个段的所有键值对
foreach (var section in sections)
{
var dict = new Dictionary<string, string>();
buffer.Clear();
GetPrivateProfileString(section, null, null, buffer, buffer.Capacity, _path);
foreach (var keyValue in buffer.ToString().Split('\0'))
{
if (!string.IsNullOrEmpty(keyValue))
{
string[] values = keyValue.Split('=');
if (values.Length >= 2 && !string.IsNullOrEmpty(values[0]))
{
dict.Add(values[0], values[1]);
}
}
}
_iniData.Add(section, dict);
}
}
public void WriteIni()
{
// 写入每个段(section)的所有键值对
foreach (var section in _iniData.Keys)
{
WritePrivateProfileString(section, null, null, _path);
foreach (var keyValue in _iniData[section])
{
WritePrivateProfileString(section, keyValue.Key, keyValue.Value, _path);
}
}
}
这两个方法实现的功能非常简单,我们的功能实现也就成功了。
接下来,我们将通过两个示例来详细说明如何使用INI文件读写类。
示例1:读取INI文件
假设我们有一个名为“config.ini”的INI文件,包含以下内容:
[DataBase]
Connections=50
DB_TYPE=mysql
HOST=127.0.0.1
PORT=3306
USER=root
PASS=12345678
[Server]
IP=127.0.0.1
Port=8080
现在,我们想要读取“DataBase”段中的“HOST”参数。我们可以使用以下代码:
var iniFile = new IniFile("config.ini");
iniFile.ReadIni();
string host = iniFile._iniData["DataBase"]["HOST"];
通过这个代码,我们就能成功读取到“127.0.0.1”。
示例2:写入INI文件
假设我们需要在运行时动态添加一个新的ini配置项,并将值写入配置文件。我们可以使用以下代码:
var iniFile = new IniFile("config.ini");
iniFile.ReadIni();
iniFile._iniData["NewSection"] = new Dictionary<string, string>()
{
{ "NewKey", "NewValue" }
};
iniFile.WriteIni();
通过这个代码,我们就能成功在“config.ini”文件中添加一个新的段“NewSection”和一个新的键值对“NewKey=NewValue”。
总结
本文通过分享C#实现INI文件读写的类,以及两个示例来详细介绍了该功能的实现方法和使用方式。INI文件虽然已经不再是最优秀和最流行的方式来存储应用程序的配置参数,但是了解它的实现方式和原理,对提高我们的编程技能和知识储备很有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#实现ini文件读写类分享 - Python技术站