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的缩写,即配置文 ...
随机推荐
- Scrapy爬虫提高效率
如何提高scrapy的爬取效率 增加并发: 默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发 ...
- 将linux和uboot集成到Android编译框架中
span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror ...
- httprunner学习4-variables变量声明与引用
前言 在 HttpRunner 中,支持变量声明(variables)和引用($var)的机制.在 config 和 test 中均可以通过 variables 关键字定义变量,然后在测试步骤中可以通 ...
- 第七篇 -- XmlReader 和 XmlWriter
XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件.其实,在印象当中,XML很多的操作类都支持直接Save.Read也支持接受XmlReader与XmlWriter类的示 ...
- Java的Socket通信简单实例
服务端 package testlxd; import java.io.BufferedReader; import java.io.IOException; import java.io.Input ...
- The difference between Virtual DOM and DOM
dom是结构化的文本信息的抽象,是结构化的文本信息在内存中的表示 是操作结构化文本信息的api. Follow: Follow React attacks us with the virtual DO ...
- hdu2068-RPG的错排-(dp递推式)
去年看错排公式,死都看不懂,基础扎实之后再来看就略懂了. 公式: dp[ n ] = ( n-1 ) * ( dp[n-1] + dp[n-2] ) 解析公式:比如有n个元素,各对应n个正确位置,dp ...
- SecureCRT 日记保存带时间戳
%h:%m:%s:%t--- result:
- 在windbg调试会话中查找.NET版本
如何在调试会话中找到调试对象中使用的.NET运行时版本?以自动/脚本方式,不使用调试器扩展或符号? 答案: !for_each_module .if ( ($sicmp( "@#Module ...
- Docker原理及使用
虚拟化系统: 1. Type-I: 此种虚拟化是Hypervisor直接运行在硬件之上,来创建虚拟机. 2. Type-II: 这种虚拟化类似与VMware Workstations. IPC: 在相 ...