当前位置: 首页 > news >正文

C# 通过第三方库INIFileParser管理INI配置文件

C# 通过第三方库INIFileParser管理INI配置文件目录

  • 前言
  • 一、添加动态库
  • 二、添加接口类代码
  • 总结


前言

很多时候我们是直接调用系统的C++库中的GetPrivateProfileString和WritePrivateProfileString接口来实现管理INI文件的,这个接口最久可以追溯到上个世纪80年代,在VB和C++中都可以调用,我认识这个接口有20年了。在使用C#后,WIN10或WIN11环境下发现了越来越多的问题,主要发现路径上有特殊字符号,如#、+、空格、中文等组合情况下会出现找不到路径的或者出现乱码问题。虽然没有官方的具体消息,我想微软早就在较新的系统中已经停止维护这个接口了。
于是我尝试使用第三方库来实现,发现有没有类似的bug,还挺不错的。自己就参考和构建了下接口类。在这里分享一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、添加动态库

在VS中的工具中添加第三方库,工具->NuGet包管理器->管理解决方案的NuGet程序包-> 搜索ini-parser 。添加后可以在解决方案资源管理器引用中看到库文件的引用。如下图所示:

在这里插入图片描述在这里插入图片描述

二、添加接口类代码

  • 首先调用接口需要初始化类 FileIniDataParser parser = new FileIniDataParser();
  • IniRead通过section和key以及文件路径读取对应Value值,路径可以是相对地址也可以是绝对地址。
  • IniWrite则是写文件Value,这里可以看到他是通过先读取后,后重新构建修改内容的方式来写入的。
using IniParser; //第三方库INIFileParser.dll: 工具->NuGet包管理器->管理解决方案的NuGet程序包-> 搜索ini-parser  (版本INIFileParser 2.5.2.0)
using IniParser.Model;
using System;namespace ini_parser_test
{class INI_Parser{// 初始化解析器FileIniDataParser parser = new FileIniDataParser();/// <summary>/// 读INI文件/// </summary>/// <param name="section"></param>/// <param name="key"></param>/// <param name="iniFilePath"></param>/// <returns></returns>public string IniRead(string section, string key, string iniFilePath){try{// 读取INI文件 IniData data = parser.ReadFile(iniFilePath);// 获取指定Section的Key值string str = data[$"{section}"][$"{key}"];//为null则返回string.emptyreturn str ?? "";}catch (Exception ex){Console.WriteLine(ex.Message);return "";}}/// <summary>/// 写INI文件/// </summary>/// <param name="section"></param>/// <param name="key"></param>/// <param name="value"></param>/// <param name="iniFilePath"></param>public void IniWrite(string section, string key, string value, string iniFilePath){// 用于存数据先读出IniData data = parser.ReadFile(iniFilePath);// 保存值data[$"{section}"][$"{key}"] = value;// 写入INI文件parser.WriteFile(iniFilePath, data);}}
}

总结

未有持续更新迭代,才能跟上事物发展,通过尝试新的接口发现这个第三方库比之前的旧接口要好用,让我也与时俱进,不断更新迭代更上一层楼吧!

http://www.lryc.cn/news/615514.html

相关文章:

  • 智慧园区误报率↓76%:陌讯多模态融合算法实战解析
  • 202506 电子学会青少年等级考试机器人一级理论综合真题
  • 闲鱼智能监控机器人:基于 Playwright 与 AI 的多任务监控分析工具
  • 2025年SEVC SCI2区,基于深度强化学习与模拟退火的多无人机侦察任务规划,深度解析+性能实测
  • Dify 从入门到精通(第 24/100 篇):Dify 的实时数据处理与流式输出
  • 微积分 | 外微分
  • HUAWEI交换机命令基础
  • java基础(六)jvm
  • 微信小程序中实现表单自动填充功能的方法
  • Linux网络子系统架构分析
  • P1025 [NOIP 2001 提高组] 数的划分 题解
  • 基于麦克风阵列电机噪声振动监测解决方案技术解析
  • “自动报社保 + 查询导出 ” 的完整架构图和 Playwright C# 项目初始化模板
  • BroadcastChannel:轻松实现前端跨页面通信
  • 06-docker容器常用命令
  • 全栈:JDBC驱动版本和SQLserver版本是否有关系?怎么选择JDBC的版本号?
  • 自然语言交互与数据库智能客户端比对
  • SpringBoot配置生效优先级
  • 机器学习第七课之支持向量机SVM
  • Java Callback 实现线程切换以及与Kotlin原理关系
  • 数码管的使用(STC8)
  • Pytest中实现自动生成测试用例脚本代码
  • Java Stream 使用 Fork/Join框架的分治任务模型
  • Windows 安装 Xinference 速记
  • CPU缓存(CPU Cache)和TLB(Translation Lookaside Buffer)缓存现代计算机体系结构中用于提高性能的关键技术
  • 【线性代数】线性方程组与矩阵——(2)矩阵与线性方程组的解
  • 计算机网络:深入了解CIDR地址块如何利用VLSM进行子网划分的过程
  • 前端视角下关于 WebSocket 的简单理解
  • 如何在 Ubuntu 24.04 LTS Linux 上安装 Azure Data Studio
  • 【排序算法】④堆排序