1、ini文件读写解决方案ini文件读写解决方案篇一:ini配置文件的读写 ini配置文件的读写 很多时候,我们的程序运行前需要用户做一些相关的设置,而且我们总是需要把一些配置信息保存下来,那天一直在思考怎么解决这个问题,突然就想到了在一些软件安装目录下的ini文件,然后经过查找资料发现其实ini文件既方便又实用。下面对其使用进行总结: 一、将信息从ini文件中读取到变量中 首先,看一个ini文件的示例。 连接参数 IpServer= DataBase=DB_TEST UserID=test Password=123456 ;注释用英文分号 以上就是一个简单的配置文档。读取信息所用的函数为 DWO
2、RD GetPrivateProfileString( LPCTSTR lpAppName, / section name LPCTSTR lpKeyName, / key name LPCTSTR lpDefault, / default string LPTSTR lpReturnedString, / destination buffer DWORD nSize, / size of destination bufferLPCTSTR lpFileName / initialization file name ); 第一个参数为字段名,上例中的连接参数;第二个参数键名,即变量名,上例中的
3、IpServer、DataBase等等;第三个参数指,如果ini文件中没有前两个参数指定的字段名或键名,则将lpDefault的值赋给变量,也就是缺省值;第四个参数是接收ini文件中键名的值的CString对象,即目的缓存器;第五个参数是目的缓存器的大小;第六个参数是ini文件的完整路径。如下: GetPrivateProfileString(L连接参数,LipServer,L, (MAX_PATH),MAX_PATH,curPath); 在此额外说一点,一般来说ini文件和exe文件是放在一起的,所以这里涉及到当前路径的问题,该问题在如何获取EXE可执行文件的所在路径一文中讲得很清楚,而在此
4、我用另一个全局函数也可以实现,假如我们的文件是配置.ini,则如下: CString curPath;/存储路径的CString对象 AfxGetModuleFileName(AfxGetInstanceHandle(),curPath); curPath=()+; (L配置.ini); 或者还可以使lpFileName的值为:“./配置.ini” 来定位到当前目录(这种方法笔者还未测试)。 此外,读取整型值便要用另一个函数: UINT GetPrivateProfileInt( LPCTSTR lpAppName, / section name LPCTSTR lpKeyName, / ke
5、y name INT nDefault, / return value if key name not foundLPCTSTR lpFileName / initialization file name ); 二、将配置信息保存到ini文件中 类似地,所用函数为: BOOL WritePrivateProfileString( LPCTSTR lpAppName, / section name LPCTSTR lpKeyName, / key name LPCTSTR lpString,/ string to add LPCTSTR lpFileName / initialization f
6、ile ); 参数与读取的时候意义基本一致,而且比读取的时候更简单一点,在此不作赘述。 最后,需要注意的一点是,文件名的路径中反斜杠必须为才表示,第一个为转义字符。 篇二:ini文件读写模块设计 ini文件读写模块设计 1. 引言 模块概述 模块通过Linux的基本I/O函数实现,实现读写ini文件功能。Ini文件格式参考附录二ini文件格式。 由于ini文件的特殊格式,模块内部每次在读写ini文件键值时需从文件头查找对应节和对应键,再进行读写操作,在写改写ini文件时需首先建立临时文件,将原ini文件中改写数据之前的数据添加到临时文件,再将需要改写的数据追加到临时文件,然后把原ini文件改写
7、数据之后的数据添加到临时文件尾最后删除原ini文件,将临时文件名改为正式ini文件名完成一次ini文件改写操作。每次调用调用操作临时文件时,需要重新打开临时文件(模块内部不保存打开的临时文件指针)。 应用程序调用该模块进行读写操作流程如下: 词汇表 约定 文件名:, 模块中其他模块的接口函数前缀:ini_,须在模块头文件中声明,其他为文件内部使用函数在声明时加static前缀。 与其他模块关系 无 第1页 共9页 石家庄泛安科技开发有限公司 函数列表 ? 接口函数 INT32 Ini_Create(INT8 sFileName); /读取字符键值 INT32 Ini_ReadString(IN
8、T8 sSectionName, INT8 sKeyName, INT8 sValue, INT32 lReadLen, INT8 sDefaultVal) /读取整形键值 INT32 Ini_ReadInt(INT8 sSectionName, INT8 sKeyName, INT32 lDefaultVal); /写键值(字符类型) INT32 Ini_WriteString(INT8 sSectionName, INT8 sKeyName, INT8 sValue) /写键值(整型) INT32 Ini_WriteIni(INT8 sSectionName, INT8 sKeyName,
9、 INT32 lValue) /删除键 INT32 Ini_DeleteField(INT8 sSectionName, INT8 sKeyName) /删除节 INT32 Ini_DeleteSection(INT8 sSectionName) /关闭ini文件 void Ini_Close() ? 局部函数 /取得键行数据 INT32 GetKeyLine (INT8 sSection, INT8 sKey, INT8 sData,); /取得键行号 INT32 GetKeyLineNo(INT8 sSection, INT8 sKey); /取得键值 INT32 GetKeyValue(
10、INT8 sLineBuffer, INT8 sData); /追加临时文件 INT32 AppendTmpFile(INT8 sBuffer); /读取并追加临时文件 INT32 ReadAndAppendTmpFile(FILE *fd, INT32 lStartLine, INT32 lEndLine); /创建ini文件 石家庄泛安科技开发有限公司 第2页 共9页 模块内部函数调用关系 ? 读取字符串Ini_ReadString ? 读取整形值Ini_ReadInt 调用关系同Ini_ReadString,取得数据后将数据转换为整形。 ? 写字段数据Ini_WriteString ?
11、删除节中对应字段Ini_DeleteField 暂不实现。 ? 删除节Ini_DeleteSection 暂不实现 2. 数据结构说明 结构定义 无 宏定义 #define LINEBUFFERLEN 255;/读取行缓冲区 第3页 共9页 石家庄泛安科技开发有限公司 #define TEMPFILENAME “” /临时文件名 局部变量 FILE *fd; /文件指针 3. 接口函数 创建文件 读取字符值 调用流程如下: 读取整形数据 石家庄泛安科技开发有限公司 第4页 共9页 写字符数据调用流程如下: 写整形数据 删除字段 第5页 共9页 石家庄泛安科技开发有限公司篇三:读写INI文件的函
12、数介绍 读写INI文件函数的介绍 INI文件就是扩展名为“ini”的文件。在Windows系统中,INI文件是很多,最重要的就是“”、“”和“”。该文件主要存放用户所做的选择以及系统的各种参数。用户可以通过修改INI文件,来改变应用程序和系统的很多配置。但自从Windows 95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。但在某些场合,INI文件还拥有其不可替代的地位。本文就来探讨一下C是如何对INI进行读写操作。 INI文件的结构 INI文件是一种按照特
13、点方式排列的文本文件。每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等号右边的就是关键字对应的值(value)。其一般形式如下: Section1 KeyWord1 = Valuel KeyWord2 = Value2 ? Section2 KeyWord3 = Value3 KeyWord4 = Value4 C和Win32 API函数 C并不像C,拥有属于自己的类库。C使用的类库是.Net框架为所有.Net程序开发提供的一个共有的类库.Net FrameWork SDK。虽然.Net F
14、rameWork SDK内容十分庞大,功能也非常强大,但还不能面面俱到,至少它并没有提供直接操作INI文件所需要的相关的类。在本文中,C操作INI文件使用的是Windows系统自带Win32的API函数WritePrivateProfileString()和GetPrivateProfileString()函数。这二个函数都位于“”文件中。 我们知道在C中使用的类库都是托管代码((来自: 小 龙 文档网:ini文件读写解决方案)Managed Code)文件,而Win32的API函数所处的文件,都是非托管代码(Unmanaged Code)文件。这就导致了在C中不可能直接使用这些非托管代码文件
15、中的函数。好在.Net框架为了保持对下的兼容,也为了充分利用以前的资源,提出了互操作,通过互操作可以实现对Win32的API函数的调用。互操作不仅适用于Win32的API函数,还可以用来访问托管的COM对象。C中对Win32的API函数的互操作是通过命名空间“”中的“DllImport”特征类来实现的。它的主要作用是指示此属性化方法是作为非托管DLL的输出实现的。下面代码就是在C利用命名空间“”中的“DllImport”特征类申明上面二个Win32的API函数: C申明INI文件的写操作函数WritePrivateProfileString(): DllImport ( kernel32 )
16、private static extern long WritePrivateProfileString ( string section , string key , string val , string filePath ) ; 参数说明:section:INI文件中的段落;key:INI文件中的关键字;val:INI文件中关键字的数值;filePath:INI文件的完整的路径和名称。 C申明INI文件的读操作函数GetPrivateProfileString(): DllImport ( kernel32 ) private static extern int GetPrivatePr
17、ofileString ( string section ,string key , string def , StringBuilder retVal , int size , string filePath ) ; 参数说明:section:INI文件中的段落名称;key:INI文件中的关键字;def:无法读取时候时候的缺省数值;retVal:读取数值;size:数值的大小;filePath:INI文件的完整路径和名称。 C中读写INI文件的关键步骤和解决方法 C对INI文件进行写操作: /写入INI文件 private void button2_Click ( object sender
18、 , e ) string FileName = ; string section = ; string key = ; string keyValue = ; WritePrivateProfileString ( section , key , keyValue , FileName ) ; ( 成功写入INI文件! , 信息 ) ; 对INI文件进行写操作,是通过组件button2的Click事件来实现的。这里有一点应该注意,当在调用WritePrivateProfileString()对INI文件进行写操作的时候,如果此时在INI文件中存在和要写入的信息相同的段落名称和关键字,则将覆盖此INI信息。下面是button2组件的Click事件对应的代码清单: C对INI文件进行读操作: 正确读取INI的必须满足三个前提:INI文件的全路径、段落名称和关键字名称。否则就无法正确读取。你可以设定读取不成功后的缺省数值,在下面的程序中,为了直观设定的是“无法读取对应数值!”字符串,读取INI文件是通过button3组件的“Click”事件来实现的,下面是其对应的代码清单:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1