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)