当前位置: 首页 > 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.dtcms.com/a/322476.html

相关文章:

  • Golang的本地缓存freecache
  • Linux中Docker redis介绍以及应用
  • Kubernetes(K8s)不同行业的典型应用场景及价值分析 原创
  • 【31】C#实战篇——获取路径下的文件名(不包含路径和扩展名),并分离出文件名`fileName` ,文件名编号`SN`,文件名前缀`WMT`
  • 功能测试中常见的面试题-二
  • kettle插件-kettle MinIO插件,轻松解决文件上传到MinIO服务器
  • Nginx高性能web服务器
  • 如何衡量需求的紧急程度
  • 单片机输出高电平的两种方式
  • Spring Boot自定义Starter:从原理到实战全解析
  • TDengine IDMP 产品基本概念
  • Redis面试题及详细答案100道(01-15) --- 基础认知篇
  • 原生Vim操作大全
  • 分享一个基于Spark的眼科疾病临床数据可视化分析与应用研究Hadoop基于Vue和Echarts的眼科疾病统计数据交互式可视化系统的设计与实现
  • 麦当秀|MINDSHOW:在线AI PPT设计工具
  • linux 操作ppt
  • OceanBase架构设计
  • 7、docker |其余命令
  • 机器学习——08 特征降维
  • Android MVP架构详解:从理论到实践
  • (第三篇)spring cloud之Zookeeper注册中心
  • 观远BI 工具驱动零售消费行业精益增长的实践路径
  • 从反射到方法句柄:深入探索Java动态编程的终极解决方案
  • 【3D图像技术分析与实现】如何进行基于3DGS的城市道路重建?
  • 疯狂星期四文案网第34天运营日记
  • 计算机网络:如何将/22的CIDR地址块划分为4个子网
  • CosyVoice 语音合成模型性能优化实战:从 CPU 瓶颈到 GPU 加速的完整解决方案
  • Nginx 性能优化与动态内容处理
  • LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C++_困难)(贪心算法)
  • 关于开发语言的一些效率 从堆栈角度理解一部分c java go python