Qt调用adb对嵌入式设备的配置文件进行修改,写入多行内容

devtools/2024/12/22 12:51:48/

之前文章写过Qt调用adb命令来处理嵌入式设备的文件。
Qt开发技巧(二十五)列表窗体的纵向对齐,标签的伙伴部件设置,标签上的超链接操作,子窗体弹出时的坐标问题,Qt在PC端操作设备的方式,Qt用ADB操作设备的文件,Qt防止按钮连续误触
里边描述了如何在PC端的应用程序上调用ADB命令来操作嵌入式设备,基本满足一般的操作需求,但今天碰到一个操作嵌入式设备文件的问题,具体是这样的:
设备中有个配置文件“AppConfig.ini”,遵循配置文件的基本写法,内容是:
在这里插入图片描述
这没有问题,参考前面文章中的代码,编写函数executeAdbCommand(),使用ADB命令先从设备中将内容读取出来

bool MainWindow::executeAdbCommand(const QString &strCommand, QString &successOut, QString &errOut)
{QString adbPath = QCoreApplication::applicationDirPath() + "/adb_platform_tools/adb.exe " + strCommand;QProcess process;process.start(adbPath);bool success = process.waitForFinished(-1);if (!success){slot_onTipString("命令执行失败!!!", TipState_Danger);return false;}QString output = process.readAllStandardOutput();QString error = process.readAllStandardError();if (!output.isEmpty()){successOut = output;}if (!error.isEmpty()){errOut = error;}return true;
}

然后,需求式将原始配置文件中的“AppKey=0”改为“AppKey=1”,当然也可能改为其他数值,重新写入嵌入式设备中。但当再用上面的函数executeAdbCommand()函数将内容写入后,发现变成了这样:
在这里插入图片描述

//这样试过strOldVersion.insert(strOldVersion.indexOf("AppKey"), "\n");strOldVersion.replace(strOldVersion.indexOf("AppKey")+7, 1, m_strSetVersion);strOldVersion.insert(strOldVersion.indexOf("AppKey")+8, "\n");//写入版本号slot_onTipString(strCmd, TipState_Danger);ret = executeAdbCommand(strCmd);//这样也试过QString strOldVersion = successOut;QRegExp regex(" +"); // 匹配一个或多个空格strOldVersion = strOldVersion.replace(regex, "\r\n");ret = executeAdbCommand(strCmd);//也这样试过strCmd.append("IFS='\n' ");strCmd.append("echo -e ");strCmd.append(strAppVersion);strCmd.append(" > /private/usr/Config/AppConfig.ini");ret = executeAdbCommand(strCmd);

出来都是这样
在这里插入图片描述
“[AppConfig]”和“AppKey=0”变成了空格分隔的一行。
原本的换行符,变成了空格,经过多次尝试依然无效,最后经过不断尝试验证,发现必须要以多个命令的形式去写入,也就是说,每行内容都用一次写入命令,如下:

    QString successOut, errOut;int nError = 0;bool ret = executeAdbCommand("shell cat '/private/usr/Config/AppConfig.ini' ", successOut, errOut);if (!ret || 0 != nError){QString strTip = " 获取失败,错误返回:" + QString::number(nError);slot_onTipString(strTip, TipState_Danger);return;}slot_onTipString(successOut, TipState_Danger);QStringList list = successOut.split(QRegExp("[\r\n]"),QString::SkipEmptyParts);QString strCmd = "shell ";for(int n=0; n<list.size(); n++){//判断修改if(list.at(n).contains("AppKey")){list[n].replace(list.at(n).indexOf("AppKey")+7, 1, m_strSetVersion);}//每一行制作一个命令strCmd.append("echo ");strCmd.append(list.at(n));if(0 == n)strCmd.append(" > /private/usr/Config/AppConfig.ini ;");elsestrCmd.append(" >> /private/usr/Config/AppConfig.ini ;");}//写入版本号ret = executeAdbCommand(strCmd);if (!ret || 0 != nError){QString strTip = " 设置版本失败,错误返回:" + QString::number(nError);slot_onTipString(strTip, TipState_Danger);return;}

如此,ADB命令的形式可以多行写入配置文件到嵌入式设备中。


http://www.ppmy.cn/devtools/144375.html

相关文章

单北斗+鸿蒙系统+国产芯片,遨游防爆手机自主可控“三保险”

在当今全球科技竞争日益激烈的背景下&#xff0c;技术自主可控的重要性愈发凸显。它不仅关乎国家安全&#xff0c;更是推动产业升级和经济发展的关键。特别是在一些特殊领域&#xff0c;如防爆通信&#xff0c;自主可控的技术更是不可或缺。遨游通讯推出了一款融合了单北斗、鸿…

SpringBoot项目的创建方式(五种)

目录 1.在idea中通过aliyun创建SpringBoot项目 2、在idea中通过spring官网创建SpringBoot项目 3.通过spring官网下载再用idea打开 4.通过阿里云下载再用idea打开 5.通过mavenjava项目改为springboot项目 ​编辑 6.测试springboot 1.在idea中通过aliyun创建SpringBoot项目…

MySQL高可用

MySQL主从复制的过程是怎么样的 分为3个阶段&#xff1a; 写入binlog&#xff1a;主库修改数据后&#xff0c;会写入binlog日志&#xff0c;从库连接到主库后&#xff0c;主库会创建一个log dump线程&#xff0c;用于发送bin log的内容同步binlog&#xff1a;从库会专门创建一…

Flink CDC 生产环境常用参数总结

Flink CDC 生产环境常用参数总结 1.参数 1. 基本连接参数 这些参数用于定义如何连接到数据库&#xff0c;是配置的必需项。 参数名称说明示例connector数据库连接器类型&#xff0c;常用 mysql-cdc。connector mysql-cdchostname数据库主机名或 IP 地址。hostname 192.16…

理解支持向量机

支持向量机属于机器学习 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种典型的机器学习算法&#xff0c;属于监督学习范畴。它主要用于分类问题&#xff0c;也可以用于回归问题。在机器学习的众多算法中&#xff0c;SVM以其在小样本、高维空间…

[每周一更]-(第128期):CentOS源码安装PostgreSQL

文章目录 **1. 环境准备****安装必要的依赖****2. 下载 PostgreSQL 源码****3. 编译和安装****编译 PostgreSQL****4. 初始化数据库****5. 启动和管理 PostgreSQL 服务****手动启动 PostgreSQL****将 PostgreSQL 添加到环境变量****6. 创建用户和数据库****7. 配置远程访问**修…

HTTP常见异常状态码

HTTP状态码用于表示服务器对HTTP请求的响应。以下是常见的HTTP异常状态码及其详解&#xff1a; 一、1xx&#xff1a;信息性状态码 100 Continue&#xff1a;服务器已接收到请求的一部分&#xff0c;并且客户端应继续发送请求的其余部分。101 Switching Protocols&#xff1a;…

【AI系列】Paddle Speech安装指南

文章目录 环境依赖1. 安装Python1.1 下载Python安装包1.2 安装gcc1.3 安装依赖库1.4 编译和安装Python1.5 配置环境变量 2. 安装PaddlePaddle3. 安装PaddleSpeech4. 运行PaddleSpeech5. 解决常见问题5.1 错误&#xff1a;libssl.so.1.1解决方法&#xff1a; 5.2 错误&#xff1…