c#读取ini文件

本文介绍使用C#进行Ini文件的读写操作方法。包括如何读取单个或多个节点值,以及如何在一个节点中写入单个或多个键值对。


ini 文件(保存为test.ini):

[first]
one=one's Value
[second]
two=two's Value
[third]
key1=value1
key2=value2
key3=value3
key4=value4

说明,ini 由节点,关键字,和值组成。

C# 代码

ini 的读取

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string filePath = Path.GetFullPath(@"text.ini");<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>IniFile inFile = new IniFile(filePath);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//读取单个section的单个值<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string<wbr>first = null;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string second= null;<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>first = inFile.ReadInivalue("first", "one");<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>second= inFile.ReadInivalue("second", "two");<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//读取单个section的多个值<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string[] keys= new string[] { "key1", "key2", "key3", "key4"};<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>ArrayList values = new ArrayList();<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>for (int i = 0; i &lt; 4; i++)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>values.Add(inFile.ReadInivalue("third", keys[i]));<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

ini 的写入


<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string filePath = Path.GetFullPath(@"test.ini");<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>IniFile iniFile = new IniFile(filePath);</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//在一个section中写入一个key<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>iniFile.WriteInivalue("first", "one", "one's Value");<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>iniFile.WriteInivalue("second", "two", "two's Value");</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>//在一个section中写入多个key<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string[] keys = new string[] { "key1", "key2", "key3", "key4"};<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>string[] values = new string[] { "value1", "value2", "value3","value4" };<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>for (int i = 0; i &lt; 4; i++)<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>{<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>iniFile.WriteInivalue("third", keys[i], values[i]);<br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr>}</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

<think>我们被要求使用C#读取INI文件。根据引用,我们可以看到几个关键点: 1. 引用[1]提到C#读取ini文件、键值对操作,并提到虽然微软推荐使用注册表或.NET配置文件,但有时仍会使用INI。 2. 引用[2]和[3]提供了具体的代码示例,包括写INI文件和读INI文件的方法。 3. 引用[4]也提到了读取INI文件的方法。 由于C#本身没有直接操作INI文件的类,我们需要使用Windows API函数。主要用到的两个函数是: - `GetPrivateProfileString`:读取INI文件中的值。 - `WritePrivateProfileString`:向INI文件写入值。 我们将按照以下步骤进行: 1. 导入这两个API函数(使用DllImport)。 2. 封装读取和写入的方法。 注意:INI文件的结构是分节的,每节下有不同的键值对。 下面是一个完整的示例,包括读取和写入INI文件的方法:</think>### C# 读取 INI 文件的方法 在 C#读取 INI 文件需要调用 Windows API 函数,因为 .NET Framework 本身不提供原生支持。以下是完整实现方案: #### 1. 声明 API 函数 ```csharp using System.Runtime.InteropServices; using System.Text; public class IniHelper { [DllImport("kernel32")] private static extern int GetPrivateProfileString( string section, string key, string def, StringBuilder retVal, int size, string filePath); [DllImport("kernel32")] private static extern long WritePrivateProfileString( string section, string key, string val, string filePath); } ``` #### 2. 读取 INI 值的方法 ```csharp public static string GetValue(string section, string key, string defaultValue, string filePath) { const int bufferSize = 255; var temp = new StringBuilder(bufferSize); int ret = GetPrivateProfileString( section, key, defaultValue, temp, bufferSize, filePath ); return temp.ToString(); } ``` #### 3. 写入 INI 值的方法 ```csharp public static bool SetValue(string section, string key, string value, string filePath) { long result = WritePrivateProfileString(section, key, value, filePath); return result != 0; // 返回操作是否成功 } ``` #### 4. 使用示例 ```csharp // 读取配置 string configFile = @"C:\App\config.ini"; string server = IniHelper.GetValue("Database", "Server", "localhost", configFile); string port = IniHelper.GetValue("Database", "Port", "1433", configFile); // 写入配置 bool success = IniHelper.SetValue("Logging", "Level", "Debug", configFile); ``` #### 注意事项: 1. **文件路径**:需使用物理路径(相对路径或绝对路径) 2. **默认值**:当键不存在时返回预设的默认值 3. **缓冲区大小**:`StringBuilder` 初始化长度决定最大读取长度 4. **字符编码**:API 默认使用系统 ANSI 编码,如需 UTF-8 需额外处理[^1] > 关键原理:通过 `kernel32.dll` 的 `GetPrivateProfileString` API 实现跨进程配置读取,该函数直接解析 INI 文件结构[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值