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操作类的更多相关文章

  1. 我也分享一个c# ini操作类

    刚刚看了一篇 @云菲菲 的关于基于正则的INI辅助类文章:http://www.cnblogs.com/yunfeifei/p/4081977.html,作者写的不错.还看到评论处有一个的地址:htt ...

  2. C# 配置文件ini操作类

    // [ DllImport ( "kernel32" ) ] //private static extern long WritePrivateProfileString ( s ...

  3. android操作ini工具类

    package com.smarteye.common; import java.io.BufferedReader; import java.io.BufferedWriter; import ja ...

  4. Ini文件操作类

    /// <summary> /// Ini文件操作类 /// </summary> public class Ini { // 声明INI文件的写操作函数 WritePriva ...

  5. C# ini配置文件操作类

    /// <summary> /// INI文件操作类 /// </summary> public class IniFileHelper { /// <summary&g ...

  6. C# 文件操作类大全

      C# 文件操作类大全 时间:2015-01-31 16:04:20      阅读:1724      评论:0      收藏:0      [点我收藏+] 标签: 1.创建文件夹 //usin ...

  7. C# 读取Ini配置文件类

    配置文件 为fileName.ini 的文件 第一行必须为空,不然读不出值 [section1] key=value key2=value ......... [section2] key=value ...

  8. Python 之configparser读取配置操作类

    一.为什么要封装 我们为什么要封装,我相信你们在项目开发过程中深有体会,那么这个读取配置工具类,又是为了什么? 为了项目参数配置的灵活性,不要改动到源码 为了信息的安全(一定层面的),体现代码重用性 ...

  9. 一个数据库操作类,适用于Oracle,ACCESS,SQLSERVER

    最近做了一个数据诊断的项目,里面自己写了一个数据库的操作类,包含:连接数据库.读数据表.执行SQL操作,释放数据库等组成,希望对大家有用,由于水平有限,若有错误或者代码不足地方欢迎指正,谢谢. ADO ...

随机推荐

  1. 从JDBC程序看为什么需要Mybatis

    package com.xuebusi.jdbc; import java.sql.*; /** * 从JDBC程序看为什么需要Mybatis * * 1.加载驱动程序和数据库连接所需要的url.用户 ...

  2. JNDI到底是什么,有什么作用

    http://shitou521.iteye.com/blog/696006 ******************************************* JNDI的一篇文章 前端时间总是在 ...

  3. C中fread()函数的返回值

    这个问题很容易搞错,并导致很多问题,需要强调的是fread函数返回的并不是字节数. realRead = fread(buf,item,count,fp)    (每次读item大小的数据块,分cou ...

  4. 使用 Elasticsearch 实现博客站内搜索

    Reference:  http://www.open-open.com/lib/view/open1452046497511.html 一直以来,为了优化本博客站内搜索效果和速度,我使用 bing ...

  5. redis 最优雅的错误提示

    Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: DENIED Redis ...

  6. 【Unity/Kinect】获取预制的手势信息KinectInterop.HandState

    Kinect使用了枚举KinectInterop.HandState来描述手势. 该手势指的是手掌的状态(张开/握拳),而不是说整个手臂的肢体动作(Gesture). 同样是需要嵌套在Kinect获取 ...

  7. 【WPF】动态设置Binding的ConverterParameter转换器参数

    问题:XAML中,想要在一个Bingding语句中再次Bingding. Source="{Binding Path=Image,Converter={StaticResource UMat ...

  8. BloomFilter——大规模数据处理利器[转]

    原文链接:原文 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合. 一. 实 ...

  9. wireshark error: There are no interfaces on which a capture can be done.

    一.Linux环境:1.root用户启动 01.启动一个shell 02.sudo wireshark (需要root权限) 2.普通用户启动 从Linux中第一次启动Wireshark的时候,可能会 ...

  10. 使用DroneKit控制无人机

    DroneKit-Python是一个用于控制无人机的Python库.DroneKit提供了用于控制无人机的API,其代码独立于飞控,单独运行在机载电脑(Companion Computer)或其他设备 ...