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

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.xdnf.cn/news/17333.html

相关文章:

  • 2025年渗透测试面试题总结-09(题目+回答)
  • 实战:MyBatis 中 db.properties 的正确配置与最佳实践
  • RAGFoundry:面向检索增强生成的模块化增强框架
  • 五、RuoYi-Cloud-Plus 前端项目部署以及如何改后端请求地址。
  • 【CTF】PHP反序列化基础知识与解题步骤
  • Java 大视界 -- Java 大数据在智能医疗手术机器人操作数据记录与性能评估中的应用(390)
  • 深入剖析Spring MVC核心原理:从请求到响应的魔法解密
  • Java-线程线程的创建方式
  • 【线性代数】线性方程组与矩阵——(3)线性方程组解的结构
  • kubectl get node k8s-node01 -o yaml | grep taint -B 5 -A 5
  • 电子电气架构 --- 48V车载供电架构
  • 第16届蓝桥杯Scratch选拔赛初级及中级(STEMA)2024年11月24日真题
  • 阿里Qwen-Image本地部署详细指南
  • SAP在越南投资1.75亿美元建设研发中心
  • 多线程(四) --- 线程安全问题
  • JS逆向实战案例之----【通姆】252个webpack模块自吐
  • jQuery 零基础学习第一天
  • 进阶向:Python编写网页爬虫抓取数据
  • PG靶机 - Shiftdel
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(15):文法+单词第5回
  • 99-基于Python的京东手机数据分析及预测系统
  • 母线电压采样芯片的四大类——汽车级选型对比表
  • git查看单个文件的所有修改记录
  • 105-基于Flask的珍爱网相亲数据可视化分析系统
  • ubuntu修改密码
  • SQL 172 未完成试卷数大于1的有效用户
  • 【高等数学】第八章 向量代数与空间解析几何——第四节 空间直线及其方程
  • EPI2ME分析软件测试
  • 数字图像处理基础——opencv库(Python)
  • 我用C++和零拷贝重构了文件服务器,性能飙升3倍,CPU占用降低80%