Ini操作类
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text; public class INIFileUtil
{
/// <summary>
/// INI文件地址
/// </summary>
private string path; /// <summary>
/// 初始化
/// </summary>
/// <param name="INIPath">路径</param>
private INIFileUtil(string INIPath)
{
this.path = INIPath;
} public static INIFileUtil LoadIniFile(string iniFile)
{
return new INIFileUtil(iniFile);
}
/// <summary>
/// 构造函数
/// </summary>
private INIFileUtil()
{
} [DllImport("kernel32", EntryPoint = "WritePrivateProfileString")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32", EntryPoint = "GetPrivateProfileString")]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
[DllImport("kernel32", EntryPoint = "GetPrivateProfileString")]
private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
[DllImport("kernel32.dll", EntryPoint = "GetPrivateProfileSectionNames", CharSet = CharSet.Ansi)]
private static extern int GetPrivateProfileSectionNames(IntPtr lpszReturnBuffer, int nSize, string filePath);
[DllImport("KERNEL32.DLL ", EntryPoint = "GetPrivateProfileSection", CharSet = CharSet.Ansi)]
private static extern int GetPrivateProfileSection(string lpAppName, byte[] lpReturnedString, int nSize, string filePath); /// <summary>
/// 写INI文件
/// </summary>
/// <param name="Section">分组节点</param>
/// <param name="Key">关键字</param>
/// <param name="Value">值</param>
public void IniWriteValue(string Section, string Key, string Value)
{
INIFileUtil.WritePrivateProfileString(Section, Key, Value, this.path);
} /// <summary>
/// 读取INI文件
/// </summary>
/// <param name="Section">分组节点</param>
/// <param name="Key">关键字</param>
/// <returns></returns>
public string IniReadValue(string Section, string Key)
{
StringBuilder stringBuilder = new StringBuilder();
INIFileUtil.GetPrivateProfileString(Section, Key, "", stringBuilder, , this.path);
return stringBuilder.ToString();
} /// <summary>
/// 读取INI文件
/// </summary>
/// <param name="section">分组节点</param>
/// <param name="key">关键字</param>
/// <returns></returns>
public byte[] IniReadValues(string section, string key)
{
byte[] array = new byte[];
INIFileUtil.GetPrivateProfileString(section, key, "", array, , this.path);
return array;
} /// <summary>
/// 删除ini文件下所有段落
/// </summary>
public void ClearAllSection()
{
this.IniWriteValue(null, null, null);
} /// <summary>
/// 删除ini文件下指定段落下的所有键
/// </summary>
/// <param name="Section">指定段</param>
public void ClearSection(string Section)
{
this.IniWriteValue(Section, null, null);
} /// <summary>
/// 读取一个ini里面所有的节
/// </summary>
/// <param name="sections"></param>
/// <param name="path"></param>
/// <returns></returns>
public int GetAllSectionNames(out List<string> sections)
{
int MAX_BUFFER = ;
IntPtr pReturnedString = Marshal.AllocCoTaskMem(MAX_BUFFER);
int bytesReturned = GetPrivateProfileSectionNames(pReturnedString, MAX_BUFFER, this.path);
if (bytesReturned == )
{
sections = new List<string>();
return -;
}
string local = Marshal.PtrToStringAnsi(pReturnedString, (int)bytesReturned).ToString();
Marshal.FreeCoTaskMem(pReturnedString);
//use of Substring below removes terminating null for split
sections = local.Substring(, local.Length - ).Split('\0').ToList<string>();
return ;
} /// <summary>
/// 得到某个节点下面所有的key和value组合
/// </summary>
/// <param name="section"></param>
/// <param name="keys"></param>
/// <param name="values"></param>
/// <param name="path"></param>
/// <returns></returns>
public int GetAllKeyValues(string section, out string[] keys, out string[] values)
{
byte[] b = new byte[]; GetPrivateProfileSection(section, b, b.Length, this.path);
string s = System.Text.Encoding.Default.GetString(b);
string[] tmp = s.Split((char));
ArrayList result = new ArrayList();
foreach (string r in tmp)
{
if (r != string.Empty)
result.Add(r);
}
keys = new string[result.Count];
values = new string[result.Count];
for (int i = ; i < result.Count; i++)
{
string[] item = result[i].ToString().Split(new char[] { '=' });
if (item.Length == )
{
keys[i] = item[].Trim();
values[i] = item[].Trim();
}
else if (item.Length == )
{
keys[i] = item[].Trim();
values[i] = "";
}
else if (item.Length == )
{
keys[i] = "";
values[i] = "";
}
}
return ;
}
}
Ini操作类的更多相关文章
- 我也分享一个c# ini操作类
刚刚看了一篇 @云菲菲 的关于基于正则的INI辅助类文章:http://www.cnblogs.com/yunfeifei/p/4081977.html,作者写的不错.还看到评论处有一个的地址:htt ...
- C# 配置文件ini操作类
// [ DllImport ( "kernel32" ) ] //private static extern long WritePrivateProfileString ( s ...
- android操作ini工具类
package com.smarteye.common; import java.io.BufferedReader; import java.io.BufferedWriter; import ja ...
- Ini文件操作类
/// <summary> /// Ini文件操作类 /// </summary> public class Ini { // 声明INI文件的写操作函数 WritePriva ...
- C# ini配置文件操作类
/// <summary> /// INI文件操作类 /// </summary> public class IniFileHelper { /// <summary&g ...
- C# 文件操作类大全
C# 文件操作类大全 时间:2015-01-31 16:04:20 阅读:1724 评论:0 收藏:0 [点我收藏+] 标签: 1.创建文件夹 //usin ...
- C# 读取Ini配置文件类
配置文件 为fileName.ini 的文件 第一行必须为空,不然读不出值 [section1] key=value key2=value ......... [section2] key=value ...
- Python 之configparser读取配置操作类
一.为什么要封装 我们为什么要封装,我相信你们在项目开发过程中深有体会,那么这个读取配置工具类,又是为了什么? 为了项目参数配置的灵活性,不要改动到源码 为了信息的安全(一定层面的),体现代码重用性 ...
- 一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER
最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库.读数据表.执行SQL操作,释放数据库等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢. ADO ...
随机推荐
- 将Java项目从maven迁移到gradle
将Java项目从maven迁移到gradle 如何将一个java项目从maven迁移到gradle呢?gradle集成了一个很方便的插件:Build Init Plugin,使用这个插件可以很方便地创 ...
- vue路由配置,vue子路由配置
上一篇关于vue环境配置已经写好了!按照操作就行了! 现在一个项目已经部署完成,接下来我们从路由开始! 还记得在初始化项目的时候,有提示是否需要安装vue-router,对没错,vue中路由全靠它! ...
- python学习笔记(20)--生成点拨【已放弃】
说明: 1. 本来是要写个脚本生成点拨rtf给讲师朗读的,不过实在是安装不上pywin32这个模块,虽然下载下来了whl文件,pip install 也能安装,但是导入pywin32.win32com ...
- 一款纯css3实现的鼠标经过按钮特效
今天再给大家带来一款纯css3实现的鼠标经过按钮特效.这款按钮非常简单,但效果很好,非常漂亮.一起看下效果图: 在线预览 源码下载 实现的代码. html代码: <div align=&qu ...
- ospf动态路由配置(单区域)
命令: Router(config-router)#network 目标网络号 反子网掩码 area 区域号 示例: Router(config-router)#network 10.2.2.0 0. ...
- Unity3D中的序列化测试
Unity3D中序列化字段常使用[SerializeField],序列化类常采用[System.Serializable],非序列化采用[System.NonSerialized]. 序列化类使用时发 ...
- 解析:SO_REUSEADDR bind: address in use
http://blog.sina.com.cn/s/blog_53a2ecbf010095db.html socket中的SO_REUSEADDR Q: 我正在写一个unix server程序,不是d ...
- Quartz 一个JOB 配置多个Trigger时注意的问题
public class SimpleExample { public void run() throws Exception { Logger log = LoggerFactory.getLogg ...
- Drupal模块的安装方法
Drupal自身的安装很简单,新建一个数据库,然后根据安装提示一步一步做就OK了. 而Drupal可以通过安装各种模块来提供更多定制功能,这些模块的安装方法基本相同,一般来说,就是以下几步: 1) 从 ...
- iOS彩票项目--第六天,运用MVC思想搭建设置界面(非storyboard方法)
一.我只想说封装的思想很重要,MVC的思想也很重要,利用MVC思想搭建一下的界面 先说显示出来的cell,有三种(图中的两种,还有一种是最普通的,没有图片的),这种显示不同的cell,交给模型来处理, ...