目标
修改xml文件,先产生一个临时文件,拷贝,修改,改名,使用opencv 非常简单地就可以搞定配置xml文件
code
c
#include <opencv2/opencv.hpp>
#include <iostream>
#include <opencv2/core/utils/filesystem.hpp> // 需要包含此头文件以使用cv::utils::fs::copy_file
using namespace cv;
using namespace std;
int main() {
// 创建FileStorage对象用于读操作
FileStorage fs_read("example.xml", FileStorage::READ);
if (!fs_read.isOpened()) {
cout << "无法打开文件!" << endl;
return -1;
}
// 读取并存储所有数据到内存中
FileStorage fs_temp("temp.xml", FileStorage::WRITE); // 创建一个临时文件来保存修改后的数据
fs_read.copyTo(fs_temp); // 复制原始文件内容到临时文件
fs_temp.release(); // 释放临时文件的写入对象
fs_read.release(); // 释放原文件的读取对象
// 打开临时文件进行修改
fs_temp.open("temp.xml", FileStorage::UPDATE);
if (!fs_temp.isOpened()) {
cout << "无法打开临时文件进行修改!" << endl;
return -1;
}
// 修改特定数据项,例如增加frameCount
int frameCount;
fs_temp["frameCount"] >> frameCount;
fs_temp << "frameCount" << (frameCount + 10); // 假设我们要将frameCount增加10
fs_temp.release(); // 关闭临时文件
// 替换原文件
if (cv::utils::fs::exists("example.xml")) {
cv::utils::fs::remove("example.xml"); // 删除原文件
}
cv::utils::fs::copy_file("temp.xml", "example.xml"); // 将临时文件复制回原文件名
cv::utils::fs::remove("temp.xml"); // 删除临时文件
cout << "frameCount已更新并保存至原文件example.xml" << endl;
return 0;
}