1、ini文件的读写
在游戏与软件开发过程中,我们经常会使用ini的配置文件,为游戏或软件配置相关的参数,因此就有必要对ini文件进行读写操作。
下面介绍C++在读写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();
}