WIN32汇编语言教程:第15章 注册表和INI文件 · 15.2 INI文件的操作(1)

15.2.1 INI文件的结构

INI文件是一种文本格式的文件,其中的数据组织格式为:

;注释

[Section1 Name]

KeyName1=value1

;注释

KeyName2=value2

...

[Section2 Name]

KeyName1=value1

KeyName2=value2

...

INI文件中可以存在多个小节(Section),每个小节的开始用包括在一对方括号中的小节名称指定,不同的小节不能重名,一个小节的内容从小节名称的下一行开始,直到下一个小节开始为止。用户程序可以按照自己的需求建立多个小节。

在每个小节中可以定义多个键(Key),每一个键由一个“键名=键值”格式的字符串组成,并独自占用一行。在同一个小节中不能存在同名的键,但是在不同的小节中可以存在同名的键。

如果需要在INI文件的某些地方加注释,可以将注释放在单独的一行中,行首以分号开始,注释行出现的地方并没有什么限制,既可以出现在文件的最前面,也可以出现在文件的任何一行中。

一般来说,如果在自己开发的应用程序中使用系统定义的INI文件,如Win.ini等,由于文件中已经存在多个小节,那么自己建立一个独立的小节比较合适,然后在这个小节中定义不同的键值,比如,下面是笔者的计算机上Win.ini文件的片断:

...

[MCI Extensions]

asf=MPEGVideo

asx=MPEGVideo

m3u=MPEGVideo

mp2v=MPEGVideo

mp3=MPEGVideo

mpv2=MPEGVideo

wma=MPEGVideo

wmv=MPEGVideo

[Hex Workshop]

Path=C:\PROGRA~1\BREAKP~1\HEXWOR~1.1\hworks32.exe

CurrentVersion=3.11

...

其中的“MCI Extensions”小节是Windows系统自身使用的小节,Windows在这里定义了一些媒体文件的关联方式,而“Hex Workshop”小节是安装了HexWorkshop16进制编辑器后由软件创建并使用的,编辑器在小节中用“Path”键定义了软件的安装目录、在“CurrentVersion”键中定义了软件的版本号。

如果觉得往系统INI文件中写数据显得不是那么“绿色环保”,那么应用程序可以建立一个独立的INI文件。如本节的例子文件就在自己运行的目录中建立了一个Option.ini文件,并在“Windows Position”小节的“X”,“Y”键中保存窗口的位置,以便在下一次运行的时候将窗口移动到上一次退出时所处的位置,内容如下:

[Windows Position]

X=194

Y=162

...

Windows系统提供了一系列函数对INI文件进行操作,其中包括读取和设置键值,获取小节名称列表及获取和删除整个小节内容等函数。下面的例子演示了这些功能的使用方法。

15.2.2 管理键值

本节的例子程序存放在所附光盘的Chapter14\ini目录中,运行后的界面如图15.1所示。例子程序在运行目录下创建了一个Option.ini文件,程序中的所有操作都是针对这个文件进行的。当用户在“Section”一栏中输入小节名称、在“Key”一栏中输入键名后,如果INI文件中对应的小节和键定义是已经存在的,那么按下“读取Key”按钮后就会将键值读取到“Value”一栏中;而按下“删除Key”按钮的时候,可以将这个键删除。

在输入小节和键名后继续在“Value”一栏中输入一个字符串,并按下“保存Key”按钮,如果指定键已经存在,那么程序用新的键值替换原来的键值;如果键名不存在,则程序创建这个键;如果创建键的时候小节名是不存在的,那么程序在创建键值之前会自动创建小节;在最极端的情况下,当INI文件也不存在的时候,那么程序也会创建INI文件。


图15.1 INI文件操作例子的运行界面

当用户按下“删除Key”按钮将一个小节中的键逐一删除直到全部键都被删除的时候,小节名称并不会被删除,INI文件中还会留有一个空的小节名称。按下“删除Section”按钮就可以将Section一栏中指定的小节全部删除(包括小节中的全部键和小节名称)。

每次进行操作后,程序自动将INI文件中的所有小节和键值枚举一遍并将内容显示在图15.1下面的编辑框中,以便观察操作的结果。下面通过分析这个程序来了解这些功能的实现方法。

源文件目录中的Ini.rc文件定义了如图15.1所示的对话框,代码如下:

#include                  <resource.h>

//##################################################################

#define ICO_MAIN     1000

#define DLG_MAIN      1000

#define IDC_SEC          1001

#define IDC_KEY          1002

#define IDC_VALUE    1003

#define IDC_INI          1004

#define IDC_DEL_SEC      1005

#define IDC_DEL_KEY      1006

#define IDC_GET_KEY      1007

#define IDC_SET_KEY      1008

//##################################################################

ICO_MAIN          ICON      "Main.ico"

//##################################################################

DLG_MAIN DIALOG 205, 128, 245, 168

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "INI 文件操作"

FONT 9, "宋体"

上页:第15章 注册表和INI文件 · 15.1 注册表和INI文件简介 下页:第15章 注册表和INI文件 · 15.2 INI文件的操作(2)

第15章 注册表和INI文件

版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号