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

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工具类文件示意图

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

          使用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();
}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值