Chinaunix首页 | 论坛 | 博客
  • 博客访问: 689615
  • 博文数量: 66
  • 博客积分: 2418
  • 博客等级: 大尉
  • 技术积分: 1659
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-28 10:04
个人简介

keep moving

文章分类

全部博文(66)

文章存档

2015年(2)

2014年(6)

2013年(7)

2011年(7)

2010年(42)

2009年(2)

分类: C/C++

2010-07-27 11:51:03

1、概述

ini是微软Windows操作系统中的文件扩展名。这些字母表示初始化。正如该术语所表示的,ini文件被用来对操作系统或特定程序初始化或进行参数设置。

在编写程序时,我们可以使用ini 文件(Profile)来保存少量数据,比如本次程序执行时窗口的位置、大小、一些用户设置的数据等等。

2ini文件格式

ini 文件是文本文件,文件格式一般为:

[Section1 Name]

KeyName1=value1

KeyName2=value2

...

[Section2 Name]

KeyName1=value1

KeyName2=value2

 

从上面的文件格式可以看出:ini 文件分为几个 Section,每个 Section 的名称用 [] 括起来;在一个 Section 中,可以有很多的 Key,每一个 Key 可以有一个值并占用一行,格式是 Key=value

3ini文件的操作函数

/* 功能:GetPrivateProfileInt - ini 文件的某个 Section 取得一个 key 的整数值

 * 参数:

 *           lpAppName:指向包含 Section 名称的字符串地址

 *           lpKeyName:指向包含 Key 名称的字符串地址

 *           INT nDefault:如果 Key 值没有找到,则返回缺省的值是多少

 *           lpFileName ini 文件的文件名

 * 返回值:

如果 Key 值没有找到的话,返回值是 nDefault 指定的缺省值,如果 Key 中的

值是负数,则返回 0,如果 Key 指定的是数字和字符串的混合,则返回数字部分的值,比如说 x=1234abcd,则返回 1234

 */

UINT GetPrivateProfileInt( LPCTSTR lpAppName,  LPCTSTR lpKeyName, INT nDefault, LPCTSTR lpFileName);

 

 

/* 功能:GetPrivateProfileString - ini 文件的某个 Section 取得一个 key 的字符串

 * 参数:

 *           lpAppName:指向包含 Section 名称的字符串地址

 *           lpKeyName:指向包含 Key 名称的字符串地址

 *           lpDefault:如果 Key 值没有找到,缺省返回缺省的字符串

 *           lpReturnedString:用于保存返回字符串的缓冲区

 *           nSize 缓冲区的长度

 *           lpFileName ini 文件的文件名

 * 返回值:

返回的字符串在缓冲区lpReturnedString内,返回值是返回的字符串的长度(不包括尾部的\0

 */

DWORD GetPrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);

 

 

/* 功能:GetPrivateProfileSection - ini 文件中读出整个 Section 的内容

 * 参数:

 *           lpAppName:指向包含 Section 名称的字符串地址

*           lpReturnedString:用于保存返回数据的缓冲区

 *           nSize 缓冲区的长度

 *           lpFileName ini 文件的文件名

 * 返回值:

返回的数据在缓冲区内,返回值是返回的数据的长度(不包括尾部的\0

 */

DWORD GetPrivateProfileSection(LPCTSTR lpAppName, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName);

 

/* 功能:GetPrivateProfileSectionNames - ini 文件中获得 Section 的名称

 * 参数:

 *           lpszReturnBuffer:用于保存返回数据的缓冲区

 *           nSize 缓冲区的长度

 *           lpFileName ini 文件的文件名

 * 返回值:

返回读入缓冲区的字符数

*/

DWORD GetPrivateProfileSectionNames(LPTSTR lpszReturnBuffer, DWORD nSize, LPCTSTR lpFileName);

 

 

/* 功能:WritePrivateProfileSection将一个整个 Section 的内容入 ini 文件的指定 Section

 * 参数:

 *           lpAppName:指向包含 Section 名称的字符串地址

 *           lpString:要写入的数据

 *           lpFileName ini 文件的文件名

 * 返回值:

            写入成功返回TRUE;写入失败返回FALSE

*/

BOOL WritePrivateProfileSection(LPCTSTR lpAppName, LPCTSTR lpString, LPCTSTR lpFileName);

 

 

/* 功能:WritePrivateProfileString - 将一个 Key 值写入 ini 文件的指定 Section

 * 参数:

 *           lpAppName:指向包含 Section 名称的字符串地址

 *           lpKeyName:指向包含 Key 名称的字符串地址

 *           lpString:要写入的字符串

 *           lpFileName ini 文件的文件名

* 返回值:

            写入成功返回TRUE;写入失败返回FALSE

*/

BOOL WritePrivateProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString, LPCTSTR lpFileName);

 

如果 ini 中没有指定的 SectionAPI 会新建 Section,如果没有指定的 Key 则新建一个 Key 并写入数据,如果已经存在,则用字符串代替原来的值。当指定的 ini 也不存在的时候,API 会自动建立一个新的文件,所以使用 ini 的好处是我们不必为了保存少量的数据涉及到文件操作,就连查找文件是否存在的操作都不必要。

 

使用要点:

在我们实际使用的时候,用的最多的是 GetPrivateProfileString WritePrivateProfileString,但在对自定义 ini 文件操作的时候要注意的是:

1ini文件的路径必须完整,文件名前面的各级目录必须存在。如果 lpFileName 指定的文件没有路径的话,api 会去 Windows 的安装目录去找而不会在当前目录找;

2文件名的路径中必须为 \\ ,因为在VC++中,\\ 才表示一个 \

3.\表示当前目录。如果ini文件放在程序所在目录中(即当前目录中),你只要在 ini 文件名前面加上 .\ 就可以了,比如说要操作当前目录下的 user.ini,那么文件名就是".\\user.ini"

4、要把一个 Key 清除时,可以使用WritePrivateProfileString向该Key写个空字符串。当你要把一个section的全部内容清空的时候,也不必把 key 一个个的清除,可以使用WritePrivateProfileSection向该Section写个空字符串。

 

 

另外,还有一组api专门用于操作win.ini文件。这组API与上面的很像,只要把上面一组的PrivateProfile 换成就可以了,参数中也相应的少了一个 ini 文件名的参数。

UINT GetProfileInt(LPCTSTR lpAppName, LPCTSTR lpKeyName, INT nDefault );

DWORD GetProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize);

GetProfileSection(LPCTSTR lpAppName, LPTSTR lpReturnedString, DWORD nSize);

BOOL WriteProfileSection(LPCTSTR lpAppName, LPCTSTR lpString);

BOOL WriteProfileString(LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpString);

 

win.in system.ini Windows的两个非常重要的初始化文件,Windows将用户所作的选择以及各种变化的系统信息记录在这两个文件中。System.ini 描述了系统硬件的当前状态,Win.ini 文件则包含了Windows 系统运行环境的当前配置。

 

 

参考文献:

 

阅读(3413) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~