C#读写ini文件
调用winAPI 实现ini文件操作
- dll路径:C:\Windows\System32\kernel32.dll;
- 若调用失败可查看dll是否存在以及环境变量(C:\Windows\System32)是否已设置
- 静态类编写如下
文件采用默认路径,若需要改变,调用之前请先更新文件路径
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace BasicExercises
{
/***
* ini文件样式
* [配置项]
* 属性1 = 属性值
* 属性2 = 属性值
* ...
*
* CharSet定义的时候使用了什么类型,在使用相关方法时必须要使用相应的类型
* 例如 GetPrivateProfileSectionNames声明为CharSet.Auto,那么就应该使用 Marshal.PtrToStringAuto来读取相关内容
* 如果使用的是CharSet.Ansi,就应该使用Marshal.PtrToStringAnsi来读取内容
* **/
class IniConfigHelper
{
static string iniFilePath = Environment.CurrentDirectory+"config.ini";
public static string IniFilePath {
get => iniFilePath; set => iniFilePath = value; }
/***
* 调用winAPI 实现ini文件操作
* dll路径:C:\Windows\System32\kernel32.dll,若调用失败可查看dll是否存在以及环境变量(C:\Windows\System32)是否已设置
* 以下是API函数
***/
/// <summary>
/// 写入ini文件:将指定的键和值写到指定的节点,如果已经存在则替换
/// </summary>
/// <param name="section">节点名称</param>
/// <param name="key">键,null也直接写入</param>
/// <param name="value">值,null也直接写入</param>
/// <param name="filePath">ini文件路径</param>
/// <returns>0失败/其他成功</returns>
//[DllImport("kernel32", CharSet = CharSet.Auto)]
//private static extern long WritePrivateProfileString(string section, string key, string value, string filePath);
/// <summary>
/// 写入ini文件:将指定的键和值写到指定的节点,如果已经存在则替换
/// </summary>
/// <param name="section">节点名称</param>
/// <param name="key">键,null则删除指定的节点及其所有的项目</param>
/// <param name="value">值,null则删除指定节点中指定的键</param>
/// <param name="filePath">ini文件路径</param>
/// <returns>操作是否成功</returns>
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern bool WritePrivateProfileString(string section, string key, string value, string filePath);
/// <summary>
/// 将指定的键值对写到指定的节点,如果已经存在则替换。
/// </summary>
/// <param name="section">节点,如果不存在此节点,则创建此节点</param>
/// <param name="keyValue">Item键值对,多个用\0分隔,形如key1=value1\0key2=value2
/// 如果为string.Empty,则删除指定节点下的所有内容,保留节点
/// 如果为null,则删除指定节点下的所有内容,并且删除该节点
/// 该方法无脑写入,遇"\0"换行写入
/// </param>
/// <param name="filePath"></param>
/// <returns>操作成功与否</returns>
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern bool WritePrivateProfileSection(string section, string keyValue, string filePath);
/// <summary>
/// 调用winAPI读取ini文件
/// </summary>
/// <param name="section">节点名称</param>
/// <param name="key">键</param>
/// <param name="def">值(未读取到数据时设置的默认返回值)</param>
/// <param name="result">读取的结构值</param>
/// <param name="size">读取的缓冲区大小</param>
/// <param name="filePath">ini路径</param>
/// <returns>读取到的字节数量</returns>
[DllImport("kernel32", CharSet = CharSet.Auto)]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder result, int size, string filePath);
/// <summary>
/// 获取所有节点名称(Section)
/// </summary>
/// <param name="ptrResultBuffer">存放节点名称的内存地址,每个节点之间使用\0分隔</param>
/// <param name="nSize">内存大小</param>
/// <param name="filePath">ini文件路径</param>
/// <returns>内容的实际长度,为0表示没有内容,为nSize-2表示内存大小不够</returns>
[DllImport("kernel32", CharSet = CharSet.

最低0.47元/天 解锁文章
606

被折叠的 条评论
为什么被折叠?



