ini文件读写解决方案.docx
《ini文件读写解决方案.docx》由会员分享,可在线阅读,更多相关《ini文件读写解决方案.docx(7页珍藏版)》请在冰豆网上搜索。
![ini文件读写解决方案.docx](https://file1.bdocx.com/fileroot1/2023-4/16/966a09ad-e4d3-4f75-9ee4-2768ba5df97b/966a09ad-e4d3-4f75-9ee4-2768ba5df97b1.gif)
ini文件读写解决方案
ini文件读写解决方案
篇一:
ini配置文件的读写
ini配置文件的读写
很多时候,我们的程序运行前需要用户做一些相关的设置,而且我们总是需要把一些配置信息保存下来,那天一直在思考怎么解决这个问题,突然就想到了在一些软件安装目录下的ini文件,然后经过查找资料发现其实ini文件既方便又实用。
下面对其使用进行总结:
一、将信息从ini文件中读取到变量中
首先,看一个ini文件的示例。
[连接参数]
IpServer=
DataBase=DB_TEST
UserID=test
Password=123456
;注释用英文分号
以上就是一个简单的配置文档。
读取信息所用的函数为
DWORDGetPrivateProfileString(
LPCTSTRlpAppName,//sectionname
LPCTSTRlpKeyName,//keyname
LPCTSTRlpDefault,//defaultstring
LPTSTRlpReturnedString,//destinationbuffer
DWORDnSize,//sizeofdestinationbufferLPCTSTRlpFileName//initializationfilename);
第一个参数为字段名,上例中的[连接参数];第二个参数键名,即变量名,上例中的IpServer、DataBase等等;第三个参数指,如果ini文件中没有前两个参数指定的字段名或键名,则将lpDefault的值赋给变量,也就是缺省值;第四个参数是接收ini文件中键名的值的CString对象,即目的缓存器;第五个参数是目的缓存器的大小;第六个参数是ini文件的完整路径。
如下:
GetPrivateProfileString(L"连接参数",L"ipServer",L"",
(MAX_PATH),MAX_PATH,curPath);
在此额外说一点,一般来说ini文件和exe文件是放在一起的,所以这里涉及到当前路径的问题,该问题在《如何获取EXE可执行文件的所在路径》一文中讲得很清楚,而在此我用另一个全局函数也可以实现,假如我们的文件是配置.ini,则如下:
CStringcurPath;//存储路径的CString对象
AfxGetModuleFileName(AfxGetInstanceHandle(),curPath);
curPath=(('\\'))+'\\';
(L"配置.ini");
或者还可以使lpFileName的值为:
“.//配置.ini”来定位到当前目录(这种方法笔者还未测试)。
此外,读取整型值便要用另一个函数:
UINTGetPrivateProfileInt(
LPCTSTRlpAppName,//sectionname
LPCTSTRlpKeyName,//keyname
INTnDefault,//returnvalueifkeynamenotfoundLPCTSTRlpFileName//initializationfilename
);
二、将配置信息保存到ini文件中
类似地,所用函数为:
BOOLWritePrivateProfileString(
LPCTSTRlpAppName,//sectionname
LPCTSTRlpKeyName,//keyname
LPCTSTRlpString,//stringtoadd
LPCTSTRlpFileName//initializationfile
);
参数与读取的时候意义基本一致,而且比读取的时候更简单一点,在此不作赘述。
最后,需要注意的一点是,文件名的路径中反斜杠必须为\\才表示\,第一个为转义字符。
篇二:
ini文件读写模块设计
ini文件读写模块设计
1.引言
模块概述
模块通过Linux的基本I/O函数实现,实现读写ini文件功能。
Ini文件格式参考附录二ini文件格式。
由于ini文件的特殊格式,模块内部每次在读写ini文件键值时需从文件头查找对应节和对应键,再进行读写操作,在写改写ini文件时需首先建立临时文件,将原ini文件中改写数据之前的数据添加到临时文件,再将需要改写的数据追加到临时文件,然后把原ini文件改写数据之后的数据添加到临时文件尾最后删除原ini文件,将临时文件名改为正式ini文件名完成一次ini文件改写操作。
每次调用调用操作临时文件时,需要重新打开临时文件(模块内部不保存打开的临时文件指针)。
应用程序调用该模块进行读写操作流程如下:
词汇表
约定
文件名:
,
模块中其他模块的接口函数前缀:
ini_,须在模块头文件中声明,其他为文件内部使用函数在声明时加static前缀。
与其他模块关系
无
第1页共9页石家庄泛安科技开发有限公司
函数列表?
接口函数
INT32Ini_Create(INT8sFileName[]);
//读取字符键值
INT32Ini_ReadString(INT8sSectionName[],INT8sKeyName[],INT8sValue[],
INT32lReadLen,INT8sDefaultVal[])
//读取整形键值
INT32Ini_ReadInt(INT8sSectionName[],INT8sKeyName[],INT32lDefaultVal);//写键值(字符类型)
INT32Ini_WriteString(INT8sSectionName[],INT8sKeyName[],INT8sValue[])//写键值(整型)
INT32Ini_WriteIni(INT8sSectionName[],INT8sKeyName[],INT32lValue)//删除键
INT32Ini_DeleteField(INT8sSectionName[],INT8sKeyName[])
//删除节
INT32Ini_DeleteSection(INT8sSectionName[])
//关闭ini文件
voidIni_Close()
?
局部函数
//取得键行数据
INT32GetKeyLine(INT8sSection[],INT8sKey[],INT8sData[],);
//取得键行号
INT32GetKeyLineNo(INT8sSection[],INT8sKey[]);
//取得键值
INT32GetKeyValue(INT8sLineBuffer[],INT8sData[]);
//追加临时文件
INT32AppendTmpFile(INT8sBuffer[]);
//读取并追加临时文件
INT32ReadAndAppendTmpFile(FILE*fd,INT32lStartLine,INT32lEndLine);//创建ini文件
石家庄泛安科技开发有限公司第2页共9页
模块内部函数调用关系
?
读取字符串Ini_ReadString
?
读取整形值Ini_ReadInt
调用关系同Ini_ReadString,取得数据后将数据转换为整形。
?
写字段数据Ini_WriteString
?
删除节中对应字段Ini_DeleteField
暂不实现。
?
删除节Ini_DeleteSection
暂不实现
2.数据结构说明
结构定义
无
宏定义
#defineLINEBUFFERLEN255;//读取行缓冲区
第3页共9页石家庄泛安科技开发有限公司
#defineTEMPFILENAME“”//临时文件名
局部变量
FILE*fd;//文件指针
3.接口函数
创建文件
读取字符值
调用流程如下:
读取整形数据
石家庄泛安科技开发有限公司第4页共9页
写字符数据
调用流程如下:
写整形数据
删除字段
第5页共9页
石家庄泛安科技开发有限公司
篇三:
读写INI文件的函数介绍
读写INI文件函数的介绍
INI文件就是扩展名为“ini”的文件。
在Windows系统中,INI文件是很多,最重要的就是“”、“”和“”。
该文件主要存放用户所做的选择以及系统的各种参数。
用户可以通过修改INI文件,来改变应用程序和系统的很多配置。
但自从Windows95的退出,在Windows系统中引入了注册表的概念,INI文件在Windows系统的地位就开始不断下滑,这是因为注册表的独特优点,使应用程序和系统都把许多参数和初始化信息放进了注册表中。
但在某些场合,INI文件还拥有其不可替代的地位。
本文就来探讨一下C#是如何对INI进行读写操作。
INI文件的结构
INI文件是一种按照特点方式排列的文本文件。
每一个INI文件构成都非常类似,由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,等号右边的就是关键字对应的值(value)。
其一般形式如下:
[Section1]
KeyWord1=Valuel
KeyWord2=Value2
?
?
[Section2]
KeyWord3=Value3
KeyWord4=Value4
C#和Win32API函数
C#并不像C++,拥有属于自己的类库。
C#使用的类库是.Net框架为所有.Net程序开发提供的一个共有的类库——.NetFrameWorkSDK。
虽然.NetFrameWorkSDK内容十分庞大,功能也非常强大,但还不能面面俱到,至少它并没有提供直接操作INI文件所需要的相关的类。
在本文中,C#操作INI文件使用的是Windows系统自带Win32的API函数——WritePrivateProfileString()和GetPrivateProfileString()函数。
这二个函数都位于“”文件中。
我们知道在C#中使用的类库都是托管代码((来自:
小龙文档网:
ini文件读写解决方案)ManagedCode)文件,而Win32的API函数所处的文件,都是非托管代码(UnmanagedCode)文件。
这就导致了在C#中不可能直接使用这些非托管代码文件中的函数。
好在.Net框架为了保持对下的兼容,也为了充分利用以前的资源,提出了互操作,通过互操作可以实现对Win32的API函数的调用。
互操作不仅适用于Win32的API函数,还可以用来访问托管的COM对象。
C#中对Win32的API函数的互操作是通过命名空间“”中的“DllImport”特征类来实现的。
它的主要作用是指示此属性化方法是作为非托管DLL的输出实现的。
下面代码就是在C#利用命名空间“”中的“DllImport”特征类申明上面二个Win32的API函数:
C#申明INI文件的写操作函数WritePrivateProfileString():
[DllImport("kernel32")]privatestaticexternlongWritePrivateProfileString(stringsection,stringkey,stringval,stringfilePath);
参数说明:
section:
INI文件中的段落;key:
INI文件中的关键字;val:
INI文件中关键字的数值;filePath:
INI文件的完整的路径和名称。
C#申明INI文件的读操作函数GetPrivateProfileString():
[DllImport("kernel32")]privatestaticexternintGetPrivateProfileString(stringsection,stringkey,stringdef,StringBuilderretVal,intsize,stringfilePath);
参数说明:
section:
INI文件中的段落名称;key:
INI文件中的关键字;def:
无法读取时候时候的缺省数值;retVal:
读取数值;size:
数值的大小;filePath:
INI文件的完整路径和名称。
C#中读写INI文件的关键步骤和解决方法
C#对INI文件进行写操作:
//写入INI文件privatevoidbutton2_Click(objectsender,e){}stringFileName=;stringsection=;stringkey=;stringkeyValue=;WritePrivateProfileString(section,key,keyValue,FileName);("成功写入INI文件!
","信息");
对INI文件进行写操作,是通过组件button2的"Click"事件来实现的。
这里有一点应该注意,当在调用WritePrivateProfileString()对INI文件进行写操作的时候,如果此时在INI文件中存在和要写入的信息相同的段落名称和关键字,则将覆盖此INI信息。
下面是button2组件的"Click"事件对应的代码清单:
C#对INI文件进行读操作:
正确读取INI的必须满足三个前提:
INI文件的全路径、段落名称和关键字名称。
否则就无法正确读取。
你可以设定读取不成功后的缺省数值,在下面的程序中,为了直观设定的是“无法读取对应数值!
”字符串,读取INI文件是通过button3组件的“Click”事件来实现的,下面是其对应的代码清单: