vc配置文件读写(ini与xml格式)

1 篇文章 0 订阅
1 篇文章 0 订阅
INI文件简介
在我们写程序时,总有一些配置信息需要保存下来,以便在下一次启动程序完成初始化,这实际上是一种类持久化。将一些信息写入INI文件(initialization file)中,可完成简单的持久化支持。
Windows提供了API接口用于操作INI文件,其支持的INI文件格式一般如下:
===============================
[Section1]
Key11=value11
Key12=value12
[Section2]
Key21=value21
Key22=value22
...
[SectionN]
KeyN1=valueN1
KeyN2=valueN2
===============================
一般一个INI文件可有N个节,每节可有n个键名及值对应,每个键名及其值以等式形式占一行。
一般键的名称可任取,不过建议用有意义的字符及词构成。值一般可为整数和字符串,其它类型要进行转换。
常见的系统配置文件:
C:/boot.ini
C:/WINDOWS/win.ini
C:/WINDOWS/system.ini
C:/WINDOWS/desktop.ini
C:/WINDOWS/Resources/Themes/Windows Classic.theme
注意,字符串存贮在INI文件中时没有引号;key和value之间的等号前后不容空格;注释以分号“;”开头。
 
VC中操作INI文件的API
(1)操作系统配置文件Win.ini的函数:
函数名
功能
GetProfileSection
读取win.ini中指定节lpAppName中所有键名及其值。lpReturnedString字符串形式如下:
Key1=Value1/0Key2=Value2/0…KeyN=ValueN/0/0
GetProfileString
读取win.ini中指定节lpAppName中键名为lpKeyName对应变量的字符串值。
GetProfileInt
读取win.ini中指定节lpAppName中键名为lpKeyName对应变量的整数值。
 
 
WriteProfileSection
写(替换)win.ini中指定节lpAppName中的键值。
lpString字符串形式同GetProfileSection中的lpReturnedString。
WriteProfileString
写(替换)win.ini中指定节lpAppName中键名为lpKeyName对应变量的字符串值。
 (2)操作用户自定义配置文件(PrivateProfile.ini)的函数:
函数名
功能
GetPrivateProfileSectionNames
读取lpFileName指定的配置文件中所有的节名。lpszReturnBuffer字符串形式如下:
Section1/0Section2/0…SectionN/0/0
GetPrivateProfileSection
同GetProfileSection。
GetPrivateProfileString
同GetProfileString。
GetPrivateProfileInt     
同GetProfileInt
GetPrivateProfileStruct
须同WritePrivateProfileStruct配套使用。
 
 
WritePrivateProfileSection
同WriteProfileSection
WritePrivateProfileString
同WriteProfileString
WritePrivateProfileStruct
不常用。
注意:
(1)使用得最频繁的是 GetPrivateProfileString 和 WritePrivateProfileString,没有WriteProfileInt/WritePrivateProfileInt函数。
(2)Get系列读取节键值,如果文件路径有误或节键名不对则返回设定的默认值。
(3)访存自定义配置文件时,文件路径lpFileName必须完整,文件名前面的各级目录必须存在。如果lpFileName文件路径不存在,则函数返回FALSE,GetLastError() = ERROR_PATH_NOT_FOUND。如果路径正确,但是文件不存在,则该函数将先创建该文件。如果路径及文件存在,则在现有ini文件基础上进行读写。
如果 lpFileName 只指定文件名而没有路径的话,调用API将会去 Windows 的安装目录去查找而不会在当前目录查找。
(4)要对调用API的模块(exe)所在目录下进行配置文件操作,可使用形如“.//config.ini”的相对路径,注意转义符。
(5)调用WritePrivateProfileSection,若参数三 lpString为NULL,则可将对应section的全部内容清空;调用WritePrivateProfileString,若参数三 lpString为NULL,则可将对应key删除。


xml格式配置文件
        使用Tinyxml解析器,项目需包含tinyxml.h,tinystr.h与tinyxml.cpp,tinystr.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp。在使用的文件中加入tinyxml.h头文件。
tinyxml解析相关api:
TiXmlDocument *myDoc = new TiXmlDocument();   // 在堆上建立一个DOC结构,需手动释放。
也可在栈上建立:TiXmlDocument myDoc;   
注意:Doc相应节点的析构会在myDoc节点的析构函数中完成,所以只要成功析构了myDoc,文档结构也就完成了释放。


// 设置申明,支持中文解析。
TiXmlDeclaration *pDeclaration = new TiXmlDeclaration("1.0", "GB2312", "");
myDoc.LinkEndChild(pDeclaration);
(1) create the Root and connect it 
TiXmlElement *RootElement = new TiXmlElement("人员组"); 
myDoc->LinkEndChild(RootElement);
(2)create a person and connect it 
TiXmlElement *PersonElement = new TiXmlElement("人员"); 
RootElement ->LinkEndChild(PersonElement); 
如(3)所示,如果一个元素有属性需要设置,通过调用SetAttribute()方法,可以实现目标,在设置时,会在Element的内部的链表上搜索,如果已经有相应的属性名,那么视之为改写,如果没有则添加. 
(3) set the attribute fo Person 
PersonElement ->SetAttribute("ID", "1");
//(4) create Elementy name && age and connect them 
TiXmlElement* NameElement = new TiXmlElement("姓名"); 
TiXmlElement* AgeElement = new TiXmlElement("年龄"); 
PersonElement ->LinkEndChild(NameElement); 
PersonElement ->LinkEndChild(AgeElement); 
如5所示,文本应该是XML中最好处理的类型了,它在DOM树结构中只能以“叶子”的形式存在.
//(5) set element Name && age and connect it 
TiXmlText *NameContent = new TiXmlText("周星星"); 
TiXmlText *AgeContent = new TiXmlText("20"); 
NameElement ->LinkEndChild(NameContent); 
AgeElement ->LinkEndChild(AgeContent);
// (6) save the file 
myDoc ->SaveFile("star.xml");


读取xml
(1)加载xml文件
myDoc->LoadFile(filepath);


myDoc = new TiXmlDocument(filepath);
myDoc->LoadFile();
(2)定位根节点
TiXmlElement* rootElement = myDoc->RootElement();
CString str = rootElement->Value(); // 得到根节点值


// 遍历一层节点
for (TiXmlElement* pChildElement = pRootElement->FirstChildElement();
NULL != pChildElement;
pChildElement = pChildElement->NextSiblingElement())


if (str == pChildElement->Value()) // 节点匹配


// 获取节点内容
pChildElement->FistChild()->Value();


// 获取节点属性
value = pChildElement->Attributr(str);







  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值