using System.Text;
using System.Runtime.InteropServices;
using System; namespace Benson.INI读写
{
#region INI结构介绍
/**
INI文件其实是一种具有特定结构的文本文件,它的构成分为三部分,结构如下:
[Section1]
key 1 = value2
key 1 = value2
……
[Section2]
key 1 = value1
key 2 = value2
…… 文件由若干个段落(section)组成,每个段落又分成若干个键(key)和值(value)。
*/
#endregion #region INI读写辅助类,采用WIN32API
#region WIN32API介绍
/*
Windows系统自带的Win32的API函数GetPrivateProfileString()和WritePrivateProfileString()分别实现了对INI文件的读写操作,他们位于kernel32.dll下。
但是令人遗憾的是C#所使用的.NET框架下的公共类库并没有提供直接操作INI文件的类,所以唯一比较理想的方法就是调用API函数。
然后,.Net框架下的类库是基于托管代码的,而API函数是基于非托管代码的,(在运行库的控制下执行的代码称作托管代码。相反,在运行库之外运行的代码称作非托管代码。)如何实现托管代码与非托管代码之间的操作呢?.Net框架的System.Runtime.InteropServices命名空间下提供各种各样支持COM interop及平台调用服务的成员,其中最重要的属性之一DllImportAttribute可以用来定义用于访问非托管API的平台调用方法,它提供了对从非托管DLL导出的函数进行调用所必需的信息。下面就来看一下如何实现C#与API函数的互操作。
读操作:
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath);
section:要读取的段落名
key: 要读取的键
defVal: 读取异常的情况下的缺省值
retVal: key所对应的值,如果该key不存在则返回空值
size: 值允许的大小
filePath: INI文件的完整路径和文件名写操作: 写操作
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
section: 要写入的段落名
key: 要写入的键,如果该key存在则覆盖写入
val: key所对应的值
filePath: INI文件的完整路径和文件名
*/
#endregion public class INIManager
{
public string iniPath; //INI文件路径以及名称 #region DLL导入
[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);
#endregion #region 构造函数
/// <summary>
/// 构造方法
/// </summary>
/// <param name="INIPath">文件路径</param>
public INIManager(string INIPath)
{
iniPath = INIPath;
} /// <summary>
/// 在不提供文件时候的构造方法
/// </summary>
public INIManager() //如果不提供INI文件的路径以及名称,则默认为当前的应用名称.ini
{
char[] charsToTrim = { '\"',' '};
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(Environment.CommandLine.Trim(charsToTrim));
iniPath = Environment.CurrentDirectory+ "\\" +fileNameWithoutExtension + ".ini";
//Console.WriteLine(iniPath); //Test Example
}
#endregion #region INI写入
/// <summary>
/// 写入INI文件,如果键,值存在则直接覆盖
/// </summary>
/// <param name="section">段落名称(如"SectionName"(无需双引号))</param>
/// <param name="key">键</param>
/// <param name="value">值</param>
public void IniWriteValue(string section, string key, string value)
{
WritePrivateProfileString(section, key, value, this.iniPath);
} /// <summary>
/// 写入INI文件,默认Default段落
/// </summary>
/// <param name="Key">键</param>
/// <param name="Value">值</param>
public void IniWriteValue( string Key, string Value)
{
string Section = @"Default";
IniWriteValue(Section, Key, Value);
}
#endregion #region INI读取
/// <summary>
/// 读出INI文件
/// </summary>
/// <param name="section">段落名称(如"SectionName"(无需双引号) )</param>
/// <param name="Key">键</param>
/// <returns>返回对应键的值</returns>
public string IniReadValue(string section, string Key)
{
StringBuilder temp = new StringBuilder();
int i = GetPrivateProfileString(section, Key, "", temp, , this.iniPath);
return temp.ToString();
} /// <summary>
/// 读出INI文件,默认情况下从Default中读取
/// </summary>
/// <param name="Key">键</param>
/// <returns>返回对应键的值</returns>
public string IniReadValue(string Key)
{
string section = @"Default";
return IniReadValue(section, Key);
} }
#endregion #endregion #region 测试用类
class Test
{
static void Main(string[] args)
{
INIManager imDriveC = new INIManager(@"c:\test.ini");
Console.WriteLine(imDriveC.IniReadValue("name1").Equals("").ToString()); //首先查看在文件不存在的情况下的是否有异常,异常读取到的值
imDriveC.IniWriteValue("name1", "carl");
Console.WriteLine(imDriveC.IniReadValue("Name1")); INIManager im = new INIManager();
im.IniWriteValue("姓","Cai");
im.IniWriteValue("名", "Benson"); Console.WriteLine(im.IniReadValue("姓"));
Console.WriteLine(im.IniReadValue("cao"));
Console.ReadKey();
}
}
#endregion }

读写INI辅助类的更多相关文章

  1. c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)

    c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ...

  2. QT读写ini配置文件

        /********下面是写ini文件*************************/     //Qt中使用QSettings类读写ini文件     //QSettings构造函数的第一 ...

  3. VB读写INI文件的四个函数以及相关API详细说明

    WritePrivateProfileString函数说明  来源:http://blog.csdn.net/wjb9921/article/details/2005000 在我们写的程序当中,总有一 ...

  4. C# 读写INI 文件

    INI 格式: [Section1] KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2] KeyWord3 = Value3 KeyWord4 = V ...

  5. WIN32读写INI文件方法

      在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...

  6. 读写ini文件

    C# 使用文件流来读写ini文件 背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI ...

  7. 在 WinCe 平台读写 ini 文件

    在上篇文章开发 windows mobile 上的今日插件时,我发现 wince 平台上不支持例如 GetPrivateProfileString 等相关 API 函数.在网络上我并没有找到令我满意的 ...

  8. 使用C#读写ini配置文件

    INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打工,主要存放的是用户所做的选择或系统的各种参数. INI文件其实并不是普通的文本文件.它有自己的结构.由若 ...

  9. Windows中读写ini文件

    .ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,来配置应用软件以实现不同用户的要求.配置文件有很多种如ini配置文件,XML ...

随机推荐

  1. BZOJ 1071组队

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1071 题目很好,居然写了很久,题解找了真多: 主要两种做法: O(n^2lgn),通过优先 ...

  2. C# 序列化 Serialize 的应用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  3. iOS第三方(ActionSheet)-JTSActionSheet

    外观和系统的基本一样 github地址:https://github.com/jaredsinclair/JTSActionSheet 百度云下载: http://pan.baidu.com/s/1q ...

  4. HTTP协议header标头详解

    本文根据RFC2616(HTTP/1.1规范),参考 http://www.w3.org/Protocols/rfc2068/rfc2068 http://www.w3.org/Protocols/r ...

  5. Dom新find

    1.HTML标签和属性是不区分大小写的,但JS是区分大小写的:所以(1)HTML专有的接口的属性应该以小写字母开头,如果属性名由多个单词构成,第二个及接下来的每个单词的首字母都要大写.(2)有些HTM ...

  6. java for循环的几种写法

    J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类 ...

  7. Tomcat SSL 设置

    1. 先用如下命令生成tomcat 证书 cls rem please set the env JAVA_HOME before run this bat file SET JAVA_HOME=C:\ ...

  8. 叠罗汉II

    叠罗汉是一个著名的游戏,游戏中一个人要站在另一个人的肩膀上.为了使叠成的罗汉更稳固,我们应该让上面的人比下面的人更轻一点.现在一个马戏团要表演这个节目,为了视觉效果,我们还要求下面的人的身高比上面的人 ...

  9. 如何搭建配置php开发环境

    PHP的配置 1.打开解压后的C:\Program Files (x86)\php-5.3.5文件夹 1 将php.ini-development文件并更改名称为php.ini(留个备份,好习惯) 2 ...

  10. Linux文件查找命令find,xargs详述

    目录: 一.find 命令格式 1.find命令的一般形式为: 2.find命令的参数: 3.find命令选项: 4.使用exec或ok来执行shell命令: 二.find命令的例子: 1.查找当前用 ...