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. [转帖]cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND

    原贴: cocos2D-X源码分析之从cocos2D-X学习OpenGL(3)----BATCH_COMMAND 上一篇介绍了QUAD_COMMAND渲染命令,顺带介绍了VAO和VBO,这一篇介绍批处 ...

  2. div,contenteditable编辑器之ctrl+enter换行,enter发送

    //回车发消息 $scope.keyDownSend = function ($event) { var keycode = window.event?$event.keyCode:$event.wh ...

  3. html5和css3学习历程

    1.video,audio视频和音频的应用 <!doctype html><html> <head></head> <body>  < ...

  4. [已修正]安装struts找不到tld文件

    今天安装的struts1.3,但是缺少tld文件,所以无法使用taglib,找了半天 假设你的struts版本为1.3.10 解压后的目录为F:\struts-1.3.10-all\struts-1. ...

  5. WEB开发的标准目录结构

    刚才在书上看到的,感觉很重要,简单做个笔记 把你的jsp.css.js代码分别放到3个文件夹中(这3个文件夹就名为jsp,css,js),文件夹中设置子目录,这些子目录最好命名与html文件的子目录命 ...

  6. c++——派生类和基类转换(类型兼容性原则)

    基类也叫父类,派生类也叫子类. 类之间的继承关系继承关系是类之间的父子关系. 继承关系的特点如下:A. 子类拥有父类的所有属性和行为B. 子类也是一种特殊的父类C. 子类对象可以当父类对象使用D. 子 ...

  7. python学习笔记(22)--漫画生成html最终版

    说明(2017.3.14): 1. 在主文件夹生成一个main.html作为目录 2. 在每个子文件夹生成一个index.html作为看图网页 3. 通过python批量生成html网页,js配合进行 ...

  8. DevExpress的DateEdit设置显示日期和时间

    1. 设置Mask.EditMask和DisplayFormat,EditFormat属性.设置为一致:'yyyy-MM-dd HH:mm';  //依照想要的显示格式设置此字符串. [csharp] ...

  9. Swif基础语法01

    import Foundation /** *  1,第一个swift程序 */ println("Hello, World!") /** *  2,定义常量 */ let cIn ...

  10. Android——控件AutoCompleteTextView 自动提示

    Android:控件AutoCompleteTextView 自动提示 在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android中是用AutoCompleteTextV ...