您的位置:首页 > 编程语言 > C语言/C++

C++对ini配置文件与xml配置文件的读写

2014-11-20 14:43 489 查看
1、ini文件的读写

在游戏与软件开发过程中,我们经常会使用ini的配置文件,为游戏或软件配置相关的参数,因此就有必要对ini文件进行读写操作。

下面介绍C++在读写ini文件中,常用到的几个函数:

1) 读.ini文件:

DWORD GetPrivateProfileString(
LPCTSTR lpAppName,     // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName,     // lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpDefault,     // 如果lpReturnedString为空,则把个变量赋给lpReturnedString
LPTSTR lpReturnedString, // 存放键值的指针变量,用于接收INI文件中键值(数据)的接收缓冲区
DWORD nSize,             // lpReturnedString的缓冲区大小
LPCTSTR lpFileName       // INI文件的路径
);


UINT GetPrivateProfileInt(
LPCTSTR lpAppName,  // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName,  // lpAppName 下的一个键名,也就是里面具体的变量名
INT nDefault,       // 如果没有找到指定的数据返回,则把个变量值赋给返回值
LPCTSTR lpFileName  // INI文件的路径
);


2)写.ini文件

BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // INI文件中的一个字段名[节名]可以有很多个节名
LPCTSTR lpKeyName, // lpAppName 下的一个键名,也就是里面具体的变量名
LPCTSTR lpString, // 键值,也就是数据
LPCTSTR lpFileName // INI文件的路径
);

MAX_PATH:是微软最大路径占的字节所设的宏

读取ini文件函数
void ReadIniInfo(const char* szRoomName)
{
//构梏ini文件路径
CString  strFileName,str;
str.Format(TEXT("%s.ini"),szRoomName);
char szPath[MAX_PATH];
GetCurrentDirectory(MAX_PATH, szPath);
strFileName.Format(TEXT("%s\\%s"), szPath, str);

//读取ini文件信息
int m_nRoomNum = GetPrivateProfileInt(TEXT("Config"), TEXT("RoomNum"), 0, strFileName);
}


ini文件配置示例:
[Config]
RoomNum=100

2、xml文件的读写

xml文件与ini文件一样,在游戏与软件开发的过程中,能进行配置相关的属性,只需要对xml进行修改就可以进行游戏与软件的相关配置,因此在开发过程中也很有必要对xml文件进行读写操作。

在C++中,对xml文件进行读写可以使用一个工具类rapidXml,这个工具类具体文件如图所示:



具体的源码可以到这里进行下载:点击打开链接

使用rapidXml对xml文件进行读写的方法可以参考:点击打开链接

除了使用rapidXml进行xml文件的读写外,还可以使用另外一个工具类进行读写xml文件,那就是tinyxml工具类,这个工具只有两个文件tinystr.h和tinyxml.h。

具体源码可以到这里进行下载:点击打开链接

下面将介绍如何使用tinyxml进行xml文件的读写:

假设xml配置文件的内容为:

<?xml  version="1.0"   encoding="gb2312"?>
<Root>
<Config  RoomId="10"
RoomName="游戏房间“>
</Config>
</Root>


1)读xml文件

void readXml()
{
TiXmlDocument  TiDoc;
TiDoc.LoadFile("config.xml");
TiXmlElement * pRoot = TiDoc.RootElement();
for(TiXmlElement * pElem = pRoot->FirstChildElement("Config");pElem != NULL; pElem = pElem->NextSiblingElement("Config"))
{
int roomId = atoi(pElem->Attribute("RoomId"));
std::string roomName = pElem->Attribute("RoomName");
}
}


2)写xml文件

void writeXml()
{
TiXmlDocument  TiDoc("config.xml");
TiXmlDeclaration declaration("1.0", "gb2312", "yes");
doc.InsertEndChild(declaration);
TiXmlElement pRootElem("Root");
TiXmlElement pElem("Config");
pElem.SetAttribute("RoomId", 10);
pElem.SetAttribute("RoomName", "游戏房间");
pRootElem.InsertEndChild(pElem);
TiDoc.InsertEndChild(pRootElem);
TiXmlElement * pRoot = TiDoc.RootElement();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: