C#中读写INI文件的方法例子
作者:shangke 时间:2022-10-21 23:14:48
通常C#使用基于XML的配置文件,不过如果有需要的话,比如要兼顾较老的系统,可能还是要用到INI文件。
但C#本身并不具备读写INI文件的API,只有通过调用非托管代码的方式,即系统自身的API才能达到所需的目的。
对应读写的方法分别为GetPrivateProfileString和WritePrivateProfileString。
GetPrivateProfileString中的各参数:
lpAppName —— section的名称
lpKeyName —— key的名称
lpDefault —— 如果lpKeyName没有被找到的话,则将这个值复制到lpReturnedString中
lpReturnedString —— 用于返回结果的值
nSize —— lpReturnedString的字符长度
lpFileName —— INI文件名
WritePrivateProfileString中的各参数:
lpAppName —— section的名称
lpKeyName —— key的名称
lpString —— 与lpKeyName对应的值
lpFileName —— INI文件名
实际代码如下所示:
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace INIDemo
{
class Program
{
static void Main(string[] args)
{
WritePrivateProfileString("Demo", "abc", "123", "c:\\demo.ini");
StringBuilder temp = new StringBuilder();
GetPrivateProfileString("Demo", "abc", "", temp, 255, "c:\\demo.ini");
Console.WriteLine(temp);
Console.ReadLine();
}
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern bool WritePrivateProfileString(
string lpAppName, string lpKeyName, string lpString, string lpFileName);
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern int GetPrivateProfileString(
string lpAppName, string lpKeyName, string lpDefault, StringBuilder lpReturnedString,
int nSize, string lpFileName);
}
}
程序运行后INI文件中的内容为:
[Demo]
abc=123
这是一种相对简单的方法,若是不想使用非托管方法,你也可以通过另一种比较麻烦的途径解决这个问题。
实现代码二、
public class Ini
{
// 声明INI文件的写操作函数 WritePrivateProfileString()
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
// 声明INI文件的读操作函数 GetPrivateProfileString()
[System.Runtime.InteropServices.DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, System.Text.StringBuilder retVal, int size, string filePath);
private string sPath = null;
public Ini(string path)
{
this.sPath = path;
}
public void Writue(string section, string key, string value)
{
// section=配置节,key=键名,value=键值,path=路径
WritePrivateProfileString(section, key, value, sPath);
}
public string ReadValue(string section, string key)
{
// 每次从ini中读取多少字节
System.Text.StringBuilder temp = new System.Text.StringBuilder(255);
// section=配置节,key=键名,temp=上面,path=路径
GetPrivateProfileString(section, key, "", temp, 255, sPath);
return temp.ToString();
}
}
由于INI文件的格式是固定的,所以只要编写相应的解析程序就可以完成同样的读写功能,就是通常的字符串处理而已。
如果你不愿亲自动手的话,不要紧,已经有现成的程序——Cinchoo framework,可以为你实现你想作的事情。
然后一切又变得简单了。
标签:读写,INI
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Swing拆分窗格控件JSplitPane使用详解
2022-11-14 21:13:48
![](https://img.aspxhome.com/file/2023/0/63500_0s.jpg)
Java事件处理机制(自定义事件)实例详解
2023-10-28 21:30:50
Java IO文件后缀名过滤总结
2021-09-01 23:36:47
Android 点击ImageButton时有“按下”的效果的实现
2022-04-10 05:11:23
C# 中的??操作符浅谈
2023-03-05 03:54:43
Java之InputStreamReader类的实现
2023-09-03 01:28:17
Android编程实现全局获取Context及使用Intent传递对象的方法详解
2022-02-27 08:50:13
Android Hilt Retrofit Paging3使用实例
2022-11-20 21:06:59
![](https://img.aspxhome.com/file/2023/5/102615_0s.gif)
Android倒计时控件 Splash界面5秒自动跳转
2023-09-24 18:41:16
![](https://img.aspxhome.com/file/2023/2/123352_0s.gif)
java 实现截取字符串并按字节分别输出实例代码
2021-08-28 08:10:44
Android 顶部标题栏随滑动时的渐变隐藏和渐变显示效果
2023-11-26 07:48:39
![](https://img.aspxhome.com/file/2023/4/102574_0s.gif)
SpringBoot Web详解静态资源规则与定制化处理
2022-01-23 16:19:57
![](https://img.aspxhome.com/file/2023/6/80966_0s.png)
Android中检查、设置默认程序详解
2021-08-25 14:14:21
![](https://img.aspxhome.com/file/2023/5/120075_0s.png)
Java 获取网站图片的示例代码
2022-03-11 14:52:44
![](https://img.aspxhome.com/file/2023/9/67969_0s.jpg)
C++找出字符串中出现最多的字符和次数,时间复杂度小于O(n^2)
2023-06-22 07:32:31
利用Android从0到1实现一个流布局控件
2023-01-29 06:38:15
![](https://img.aspxhome.com/file/2023/1/139001_0s.gif)
Java 关于递归的调用机制精细解读
2023-01-17 04:42:41
![](https://img.aspxhome.com/file/2023/3/74983_0s.png)
Java实现JDK动态代理的原理详解
2021-09-19 08:17:43
![](https://img.aspxhome.com/file/2023/1/69291_0s.png)
C# Winform实现波浪滚动效果
2023-05-05 04:36:54
![](https://img.aspxhome.com/file/2023/8/92838_0s.jpg)
Java聊天室之实现客户端一对一聊天功能
2022-12-28 09:23:30
![](https://img.aspxhome.com/file/2023/0/79340_0s.png)