From ba710343c92f79299dea450c0c69742c4fd49a30 Mon Sep 17 00:00:00 2001 From: ut001910 Date: Fri, 13 Sep 2024 21:01:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=BA=E8=BD=AF=E8=BF=9E=E6=8E=A5=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复追加文件为软连接问题 Bug: https://pms.uniontech.com/bug-view-273297.html Log: 修复追加文件为软连接问题 --- .../interface/archiveinterface/cliinterface.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/3rdparty/interface/archiveinterface/cliinterface.cpp b/3rdparty/interface/archiveinterface/cliinterface.cpp index ca8f1e82..c7de81bc 100644 --- a/3rdparty/interface/archiveinterface/cliinterface.cpp +++ b/3rdparty/interface/archiveinterface/cliinterface.cpp @@ -311,6 +311,7 @@ PluginFinishType CliInterface::addFiles(const QList &files, const Com // 压缩目标路径 const QString destinationPath = (options.strDestination == QString()) ? QString() : options.strDestination; qInfo() << "Adding" << files.count() << "file(s) to destination:" << destinationPath; + bool isLink = true; if (!destinationPath.isEmpty()) { // 向压缩包非第一层文件里面追加压缩 m_extractTempDir.reset(new QTemporaryDir()); @@ -326,6 +327,7 @@ PluginFinishType CliInterface::addFiles(const QList &files, const Com // 待压缩文件的文件名(临时路径全路径) const QString newFilePath = absoluteDestinationPath + QFileInfo(file.strFullPath).fileName(); + isLink = (isLink && QFileInfo(filePath).isSymLink()); // 在临时路径创建待压缩文件的链接 if (QFile::link(filePath, newFilePath)) { qInfo() << "Symlink's created:" << filePath << newFilePath; @@ -442,7 +444,18 @@ PluginFinishType CliInterface::addFiles(const QList &files, const Com ret = false; } } else { - ret = runProcess(m_cliProps->property("addProgram").toString(), arguments); + QString processName = m_cliProps->property("addProgram").toString(); + if(processName == "7z" && !destinationPath.isEmpty()) { + if(!isLink) { + for(int i = 0; i < arguments.count(); i++) { + if(arguments.at(i) == QStringLiteral("-snl")) { + arguments.replace(i, QStringLiteral("-l")); + break; + } + } + } + } + ret = runProcess(processName, arguments); } if (ret && !temp_archiveName.isEmpty()) {