tinyxml2 读取和修改文件

需要引入tinyxml2
在这里插入图片描述

读取文件数据

bool ReadYmlConfig()
{
	// 新建一个空文档
	tinyxml2::XMLDocument xmlDoc;

	// 读取指定的xml文件并判断读取是否成功
	tinyxml2::XMLError eResult = xmlDoc.LoadFile("Config/YmlConfig.cas");
	if (eResult != tinyxml2::XML_SUCCESS)
	{
		printf("error code :%d\n", tinyxml2::XML_ERROR_FILE_NOT_FOUND);
		return false;
	}
	// 获得该文件的第一个节点(根节点)
	tinyxml2::XMLNode * pRoot = xmlDoc.FirstChildElement("YmlConfig");
	if (pRoot == nullptr)
	{
		printf("error code :%d\n", tinyxml2::XML_ERROR_FILE_READ_ERROR);
		return false;
	}
	else
	{
		// 获取到CameraConfig的节点
		tinyxml2::XMLElement * pCameraGroupElement = pRoot->FirstChildElement("CameraConfig");
		
		// 获取节点下的数据
		m_strUsbCameraConfigPath = pCameraGroupElement->FirstChildElement("UsbCameraConfig")->GetText();
		m_strWebCameraConfigPath = pCameraGroupElement->FirstChildElement("WebCameraConfig")->GetText();

		// 获取到SaveConfig的节点
		tinyxml2::XMLElement * pSaveConfigElement = pRoot->FirstChildElement("SaveConfig");
		
		mVideoPath = pSaveConfigElement->FirstChildElement("SavePath")->GetText();
		mVideoName = pSaveConfigElement->FirstChildElement("SaveVideName")->GetText();
		mVideoWidth = std::atoi(pSaveConfigElement->FirstChildElement("SaveVideoWidth")->GetText());
		mVideoHeight = std::atoi(pSaveConfigElement->FirstChildElement("SaveVideoHeight")->GetText());
		mMarkerLength = std::atof(pSaveConfigElement->FirstChildElement("SaveMarkerLength")->GetText());
		m_nSpaceSize = std::atoi(pSaveConfigElement->FirstChildElement("SaveSpaceSize")->GetText());
		return true;
	}
	return false;
}

修改文件数据

bool SaveConfig()
{
	// 新建一个空文档
	tinyxml2::XMLDocument xmlDoc;

	// 读取指定的xml文件并判断读取是否成功
	tinyxml2::XMLError eResult = xmlDoc.LoadFile("Config/YmlConfig.cas");
	if (eResult != tinyxml2::XML_SUCCESS)
	{
		printf("error code :%d\n", tinyxml2::XML_ERROR_FILE_NOT_FOUND);
		return false;
	}
	// 获得该文件的第一个节点(根节点)
	tinyxml2::XMLNode * pRoot = xmlDoc.FirstChildElement("YmlConfig");
	if (pRoot == nullptr)
	{
		printf("error code :%d\n", tinyxml2::XML_ERROR_FILE_READ_ERROR);
		return false;
	}
	else
	{
		// 获取到SaveConfig的节点
		tinyxml2::XMLElement * pSaveConfigElement = pRoot->FirstChildElement("SaveConfig");
		
		// 获取到需要修改的节点
		tinyxml2::XMLElement* _savePath = pSaveConfigElement->FirstChildElement("SavePath");
		// 内容是否被修改
		if (_savePath->GetText() != ui.mPathLineEdit->text().toStdString().c_str()) 
		{
			// 修改内容
			_savePath->SetText(ui.mPathLineEdit->text().toStdString().c_str()); 
		}
		
		tinyxml2::XMLElement* saveVideName = pSaveConfigElement->FirstChildElement("SaveVideName");
		if (saveVideName->GetText() != ui.mVideoNameEdit->text().toStdString().c_str())
			saveVideName->SetText(ui.mVideoNameEdit->text().toStdString().c_str());

		tinyxml2::XMLElement* saveVideoWidth = pSaveConfigElement->FirstChildElement("SaveVideoWidth");
		if (saveVideoWidth->GetText() != ui.mWidthSpinBox->text().toStdString().c_str())
			saveVideoWidth->SetText(ui.mWidthSpinBox->text().toStdString().c_str());

		tinyxml2::XMLElement*  saveVideoHeight = pSaveConfigElement->FirstChildElement("SaveVideoHeight");
		if (saveVideoHeight->GetText() != ui.mHeightSpinBox->text().toStdString().c_str())
			saveVideoHeight->SetText(ui.mHeightSpinBox->text().toStdString().c_str());

		tinyxml2::XMLElement* _markerLength = pSaveConfigElement->FirstChildElement("SaveMarkerLength");
		double _length = ui.mLabelLength->text().toInt() / 100.0;
		if (std::atof(_markerLength->GetText()) != _length)
			_markerLength->SetText(std::to_string(_length).c_str());

		tinyxml2::XMLElement* _saveSpace =  pSaveConfigElement->FirstChildElement("SaveSpaceSize");
		if (_saveSpace->GetText() != ui.mSpaceSize->text().toStdString().c_str())
			_saveSpace->SetText(ui.mSpaceSize->text().toStdString().c_str());
		xmlDoc.SaveFile("Config/YmlConfig.cas");
		return true;
	}
	return false;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值