读写INI辅助类
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辅助类的更多相关文章
- c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)
c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ...
- QT读写ini配置文件
/********下面是写ini文件*************************/ //Qt中使用QSettings类读写ini文件 //QSettings构造函数的第一 ...
- VB读写INI文件的四个函数以及相关API详细说明
WritePrivateProfileString函数说明 来源:http://blog.csdn.net/wjb9921/article/details/2005000 在我们写的程序当中,总有一 ...
- C# 读写INI 文件
INI 格式: [Section1] KeyWord1 = Value1 KeyWord2 = Value2 ... [Section2] KeyWord3 = Value3 KeyWord4 = V ...
- WIN32读写INI文件方法
在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ...
- 读写ini文件
C# 使用文件流来读写ini文件 背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI ...
- 在 WinCe 平台读写 ini 文件
在上篇文章开发 windows mobile 上的今日插件时,我发现 wince 平台上不支持例如 GetPrivateProfileString 等相关 API 函数.在网络上我并没有找到令我满意的 ...
- 使用C#读写ini配置文件
INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打工,主要存放的是用户所做的选择或系统的各种参数. INI文件其实并不是普通的文本文件.它有自己的结构.由若 ...
- Windows中读写ini文件
.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,来配置应用软件以实现不同用户的要求.配置文件有很多种如ini配置文件,XML ...
随机推荐
- JavaScript之引用类型讲解
Object类型 Object类型是JavaScript中使用最多的一种类型.虽然Object的实例不具备多少功能,但对于在应用程序中存储和传输数据而言,它确实是非常理想的选择. 创建Object实例 ...
- application/x-www-form-urlencoded multipart/form-data text/plain 的区别和作用
我们知道在通过POST方式向服务器发送AJAX请求时最好要通过设置请求头来指定为application/x-www-form-urlencoded编码类型.知道通过表单上传文件时必须指定编码类型为&q ...
- ZOJ2929 Penalty Kick(概率)
题目挺水的,但由于其独特的阅读量比赛的时候没发现这道水题,在此做一下翻译,如果有人搜到这翻译的话有帮助的话自然最好啦. 中国队平局进入最后的点球决胜局,首先抛硬币决定谁先罚球,然后先是罚五球,如果罚的 ...
- POJ 1759
Garland Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 1236 Accepted: 547 Descriptio ...
- POJ 1401
#include<iostream>using namespace std;int main(){ int num; int i; int sum; cin> ...
- sql server 2008 修改sa密码
问题: 当我们用windows本身验证之后需要修改sa密码,出现这样的错误. 解决方案:
- 知问前端——创建header区
创建界面 我们首先要设计一个header,这个区域将要设计成永远置顶.也就是,往下拉出滚动条也永远在页面最上层可视区内.在header区,目前先设计LOGO.搜索框.按钮.注册和登录即可. 项目的大致 ...
- CSS3实现页面的平滑过渡
这是文件的css,全部文件的话请到Github下载:点击这里 @charset "UTF-8"; @font-face {font-family: 'iconfont'; src: ...
- Template
创建win32应用程序空工程 //main.cpp//time: 01/08/2013 #include<d3d9.h>#include <d3dx9.h> #pragma c ...
- cocos2d游戏界面卡住声音正常播放的问题分析
cocos2d游戏界面卡住声音正常播放的问题分析 从目前已知的情况看,出现这种情况只可能是设备的内存不够导致的. 从代码上来说内存不够时会调用AppController的“- (void)applic ...