C# INI配置文件读写类
ini是一种很古老的配置文件,C#操作ini文件借助windows底层ini操作函数,使用起来很方便;
public class IniHelper
{
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filepath); [DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath); [DllImport("kernel32", EntryPoint = "GetPrivateProfileString")]
private static extern uint GetPrivateProfileStringA(string section, string key, string def, byte[] retVal, int size, string filePath); private string FilePath = "";
private string Section = ""; private Dictionary<string, string> List = new Dictionary<string, string>(); /// <summary>
/// INI工具类
/// </summary>
/// <param name="_filePath"></param>
/// <param name="_section"></param>
public IniHelper(string _filePath = "config.ini", string _section = "default")
{
if (_filePath.Contains("\\"))
{
FilePath = _filePath;
}
else
{
FilePath = Application.StartupPath + "\\" + _filePath;
} Section = _section; Reload();
} /// <summary>
/// 重新加载
/// </summary>
public void Reload()
{
this.List = new Dictionary<string, string>(); List<string> keyList = _getKeyList();
foreach (var key in keyList)
{
this.List.Add(key, Get(key));
}
} /// <summary>
/// 获取key列表
/// </summary>
/// <returns></returns>
public string[] GetKeyList()
{
return this.List.Keys.ToArray();
} /// <summary>
/// 获取所有KEY
/// </summary>
/// <returns></returns>
private List<string> _getKeyList()
{
List<string> result = new List<string>();
byte[] buf = new byte[];
uint len = GetPrivateProfileStringA(Section, null, null, buf, buf.Length, FilePath); int j = ;
for (int i = ; i < len; i++)
if (buf[i] == )
{
result.Add(Encoding.Default.GetString(buf, j, i - j));
j = i + ;
} return result;
} /// <summary>
/// 获取值
/// </summary>
/// <param name="key"></param>
/// <param name="defaultVal"></param>
/// <returns></returns>
public string Get(string key, string defaultVal = "")
{
if (this.List.ContainsKey(key))
{
return this.List[key];
} StringBuilder s = new StringBuilder();
GetPrivateProfileString(Section, key, defaultVal, s, , FilePath); return s.ToString();
} /// <summary>
/// 设置值
/// </summary>
/// <param name="key"></param>
/// <param name="val"></param>
public void Set(string key, string val)
{
this.List[key] = val;
WritePrivateProfileString(Section, key, val, FilePath);
} /// <summary>
/// 删除key
/// </summary>
/// <param name="key"></param>
public void Del(string key)
{
this.List.Remove(key);
WritePrivateProfileString(Section, key, null, FilePath);
} /// <summary>
/// 获取int
/// </summary>
/// <param name="key"></param>
/// <param name="defaultVal"></param>
/// <returns></returns>
public int GetInt(string key, int defaultVal = )
{
string str = Get(key, defaultVal.ToString()); int val = defaultVal;
bool bo = int.TryParse(str, out val); return bo ? val : defaultVal;
} /// <summary>
/// 获取float
/// </summary>
/// <param name="key"></param>
/// <param name="defaultVal"></param>
/// <returns></returns>
public float GetFloat(string key, float defaultVal = )
{
string str = Get(key, defaultVal.ToString()); float val = defaultVal;
bool bo = float.TryParse(str, out val); return bo ? val : defaultVal;
} /// <summary>
/// 获取bool
/// </summary>
/// <param name="key"></param>
/// <param name="defaultVal"></param>
/// <returns></returns>
public bool GetBool(string key, bool defaultVal = false)
{
string str = Get(key, defaultVal ? "" : ""); return str == "";
} /// <summary>
/// 设置int
/// </summary>
/// <param name="key"></param>
/// <param name="val"></param>
public void SetInt(string key, int val)
{
Set(key, val.ToString());
} /// <summary>
/// 设置float
/// </summary>
/// <param name="key"></param>
/// <param name="val"></param>
public void SetFloat(string key, float val)
{
Set(key, val.ToString());
} /// <summary>
/// 设置bool
/// </summary>
/// <param name="key"></param>
/// <param name="bo"></param>
public void SetBool(string key, bool bo)
{
Set(key, bo ? "" : "");
}
}
C# INI配置文件读写类的更多相关文章
- C++[类设计] ini配置文件读写类config
//in Config.h #pragma once #include <windows.h> #include <shlwapi.h> #pragma comment(l ...
- 【个人使用.Net类库】(1)INI配置文件操作类
开发接口程序时,对于接口程序配置的IP地址.端口等都需要是可配置的,而在Win Api原生实现了INI文件的读写操作,因此只需要调用Win Api中的方法即可操作INI配置文件,关键代码就是如何调用W ...
- [IO] C# INI文件读写类与源码下载 (转载)
/// <summary> /// 类说明:INI文件读写类. /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:[url]http://www.sufei ...
- C# ini配置文件操作类
/// <summary> /// INI文件操作类 /// </summary> public class IniFileHelper { /// <summary&g ...
- c#通用配置文件读写类(xml,ini,json)
.NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...
- c#通用配置文件读写类与格式转换(xml,ini,json)
.NET下编写程序的时候经常会使用到配置文件.配置文件格式通常有xml.ini.json等几种,操作不同类型配置文件需要使用不同的方法,操作较为麻烦.特别是针对同时应用不同格式配置文件的时候,很容易引 ...
- 【转载】C++针对ini配置文件读写大全
http://blog.csdn.net/hgy413/article/details/6666374# ini文件(Initialization file),这种类型的文件中通常存放的是一个程序的初 ...
- vc ini配置文件读写
ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息.ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Ke ...
- C# 如何实现完整的INI文件读写类
作者: 魔法软糖 日期: 2020-02-27 引言 ************************************* .ini 文件是Initialization File的缩写,即配置文 ...
随机推荐
- Flask基础之session验证与模板渲染语法(jinja2)
目录 1.http传输请求头参数 2.Flask中request.data参数处理 3.Flask中request.json参数 4.Flask中的session管理 5.Flask中模板语法(if, ...
- (五)Kubernetes Pod状态和生命周期管理
什么是Pod Pod是kubernetes中你可以创建和部署的最小也是最简的单位.Pod代表着集群中运行的进程. Pod中封装着应用的容器(有的情况下是好几个容器),存储.独立的网络IP,管理容器如何 ...
- pandas用法总结
pandas用法总结 2018年06月07日 10:49:03 一夜了 阅读数 38705更多 分类专栏: 杂项 一.生成数据表 1.首先导入pandas库,一般都会用到numpy库,所以我们先导 ...
- Spring动态切换多数据源事务开启后,动态数据源切换失效解决方案
关于某操作中开启事务后,动态切换数据源机制失效的问题,暂时想到一个取巧的方法,在Spring声明式事务配置中,可对不改变数据库数据的方法采用不支持事务的配置,如下: 对单纯查询数据的操作设置为不支持事 ...
- 无向图边双联通分量 tarjan 模板
#include <bits/stdc++.h> using namespace std; const int MAXN = 100005; const int MAXM = 500005 ...
- linux学习10 Linux目录结构和根文件系统全面讲解
一.回顾 1.如何获取使用帮助 help,--help,man,info 官方文档,自带文档(README,CHANGELOG,INSTALL),官方文档 发行版的文档 Google Linux Ke ...
- netflix flamescope 方便的不同时间范围的火焰图查看工具
flamescope 是netflix 开源的方便的火焰图查看工具,我们可以选择不同时间范围的数据,方便分析调用链 环境准备 使用docker-compose运行,基于官方的dockerfile 创建 ...
- SpringBoot要点之使用Actuator监控
Actuator是Springboot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator开发者可以很方便地对应用系统某些监控指标进行查看.统计等. 在pom文件中加入spring-b ...
- 何时使用 django 以及何时不用?
选择一种语言和框架,因为你在上一个项目中使用了它或者因为你更熟悉它,但是这不是正确的方法. 项目启动 在开始一个新的软件项目之前,您需要评估哪种语言和框架最适合您所期望的结果.什么对你最重要?安全性. ...
- 04-树5 Root of AVL Tree (25 分)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...