一个手工读写INI文件的类(一)

原创 2004年03月21日 17:32:00

Windows中有GetPrivateProfileString WritePrivateProfileString函数可以进行读写INI配置文件,但这两个函数每取出一个数据,都要打开文件,在文件中进行搜索,这样处理的效率肯定会很慢,因此下面提供了一个将配置文件读入内存中的做法,这样做的好处是一次读取文件,快速搜索(使用Map映射)。可以将所有数据全部保存成字符串或者文件。

INI配置文件主要由四部分组成:组、键值、内容、注释和空行,下面给出一个例子文件进行说明

文件:E:/boot.ini

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

[boot loader]   ;这里是一个组,下面的两行配置数据隶属于该组

timeout=1       ;这里在等号前面的是一个键值,等号后面的是一个内容

default=multi(0)disk(0)rdisk(0)partition(2)/WINNT;下面一行是一个空行

 

[operating systems];所有在';'后面的字符都属于注释,本程序不支持REM形式的注释

multi(0)disk(0)rdisk(0)partition(2)/WINNT="Microsoft Windows 2000 Professional" /fastdetect;sadfkl;

C:/="Microsoft Windows"

 

       好了,知道了INI文件的结构,开始分析INI文件读入内存后应使用的数据结构。

       一个INI文件可以看作是由一些组以及每个组下面的数据组成的,组是字符串形式的,而数据是一个比较复杂的对象。为了搜索的方便,所以这里采用了CMapStringToPtr来组织整个INI文件,这样的话可以由组的字符串方便地查询到该组中的数据

         一个组下面的数据是由一些键值—à内容组成的映射关系,所以使用CMapStringToString来组这这些数据是最好不过的选择了。

 

         下面给出这个类的头文件和实现部分。给出之前简单介绍该类的用法:

读取上述E:/boot.ini文件:

 

 

#include "cfgdata.h"

 

         CCfgData CfgData;

 

         //Load INI文件

         CfgData.LoadCfgData("E://boot.ini");

         CString str;

         long l=0;

         //设置当前组

         CfgData.SetGroup("boot loader");

         //读取long型数据到变量l

         CfgData.GetLongData("timeout",l);

         //读取字符串型数据到变量str

         CfgData.GetStrData("default",str);

         //设置当前组

         CfgData.SetGroup("operating systems");

         //读取字符串型数据到变量str

         CfgData.GetStrData("multi(0)disk(0)rdisk(0)partition(2)//WINNT",str);

         //读取字符串型数据到变量str

         CfgData.GetStrData("C://",str);

         //将整个配置数据保存进入字符串中

         CfgData.SaveToStr(&str);

         //将整个配置数据保存进入文件中,注意配置数据相互之间没有顺序关系,

         //所以可能组和组之间、一个组的几个键值--->内容配对之间的顺序将会

         //和以前不一致,另外所有的注释和空行丢失

         CfgData.SaveCfgData("E://boot2.ini");

Ini文件读取类,采用C++ STL实现

背景:编程过程中经常会遇到读取Ini文件的场合,封装一个方便的类,能否避免重复编写,以后可复用。ini文件的格式很简单,并且不像xml之类的配置文件严谨。通常用于配置简单的键值对。 本类测试文件如下...
  • boxerxiong
  • boxerxiong
  • 2011年11月28日 22:09
  • 1476

跨平台INI文件读写API(C++版本)

1工程:跨平台INI文件读写API(C++版本)版本: 0.2.1授权方式:GNU GPL著作权所有(c) 2007 Midapex    本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公...
  • michelsn
  • michelsn
  • 2007年12月12日 14:35
  • 2420

ini文件读写封装类

#ifndef _PROFILE_H_ #define _PROFILE_H_ /**  * 读写INI文件的类  */ class CProfile { public:  ...
  • kaizi318
  • kaizi318
  • 2017年04月07日 10:09
  • 3268

C#读写Ini文件类

ini 文件 c# ini文件类
  • followingturing
  • followingturing
  • 2011年04月30日 22:49
  • 5010

QT读写配置文件(.ini)

.ini 文件是Initialization File的缩写,即初始化文件。除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现不同用户的要求。一般不用直接编辑...
  • AnonymousRookie
  • AnonymousRookie
  • 2015年08月22日 08:41
  • 5958

API读取写入 ini文件内容的方法函数详解

ini文件(即Initialization file),这种类型的文件中通常存放的是一个程序的初始化信息。ini文件由若干个节(Section)组成,每个Section由若干键(Key)组成,每个Ke...
  • yangzhao0001
  • yangzhao0001
  • 2015年10月29日 14:36
  • 189

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

WritePrivateProfileString函数说明 在我们写的程序当中,总有一些配置信息需要保存下来,以便完成程序的功能,最简单的办法就是将这些信息写入INI文件中,程序初始化时再读入.具体应...
  • wjb9921
  • wjb9921
  • 2007年12月30日 16:56
  • 2430

C# 创建ini文件

INI文件就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打开,主要存放的是用户所做的选择或系统的各种参数。 INI文件并不是普通的文本文件。它有自己的结构,由若干段落(SECTI...
  • lishk314
  • lishk314
  • 2014年03月17日 21:52
  • 693

QT ini配置文件的读写(使用QTextStream类)

1、写ini配置文件 bool saveFile(const QString &fileFullName) { if(fileFullName.isEmpty()) return false; QF...
  • lusirking
  • lusirking
  • 2016年05月09日 15:18
  • 1529

VC++中实现INI文件读写的方法和示例

VC++中实现INI文件读写的方法和示例 一:读ini配置文件 DWORD GetPrivateProfileString( LPCTSTR lpAppName,  LPCTSTR...
  • fan380485838
  • fan380485838
  • 2017年06月13日 16:58
  • 401
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个手工读写INI文件的类(一)
举报原因:
原因补充:

(最多只允许输入30个字)