qt - 从QProcess启动 7zip 给出错误"cannot find archive"

  显示原文与译文双语对照的内容
0 0

我正在处理with的应用程序,它下载。zip文件到临时目录,并将。zip文件解压到指定目录。

我已经下载了。zip文件,现在我正在尝试用 7个zip文件来解压它。 我使用QProcess启动 7 Zip 。

这里是我的Qt-build-kit-thingy的文件结构:

build-ExtractTest-Desktop_Qt_5_3_MSVC2013_64bit-Debug
 7za.exe
 build
 ExtractTest.exe

下面是我用于启动进程的代码:

//assemble extraction command
QString extractProgram ="7za.exe";
QStringList extractArguments;
extractArguments <<"x";//extract files and directories
extractArguments <<"-y";//suppress questions
extractArguments <<"-o"" + installPath+""";//extract to installdir
extractArguments <<"""+currentPath +""";
std::cout <<extractProgram.toStdString() <<"" <<extractArguments.join("").toStdString() <<std::endl;
//start extraction
extractionProcess.start(extractProgram, extractArguments);

下面是我的程序( 我将 7zip的输出输出到)的输出:

7za.exe x -y -o"D:Projectsbuild-ExtractTest-Desktop_Qt_5_3_MSVC2013_OpenGL_32bit-DebugBlaBla""C:/Users/js/AppData/Local/Temp/eci2002win.zip"
started
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Error:
cannot find archive
0

但是,当我从控制台执行命令时,7zip 按预期运行:

D:Projectsbuild-ExtractTest-Desktop_Qt_5_3_MSVC2013_64bit-Debug>7za.exe x -y -o"D:Projectsbuild-ExtractTest-Desktop_Qt_5_3_MSVC2013_OpenGL_32bit-DebugBlaBla""C:/Users/js/AppData/Local/Temp/eci2002win.zip"
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Processing archive: C:UsersjsAppDataLocalTempeci2002win.zip
Extracting ECI-Target VisualLayout.csv
Extracting DataSet CrossReference.xls
Extracting ECI2002 RandomLayoutCmyk1485-LZW.tif
Extracting ECI2002 VisualLayoutCmyk1485-LZW.tif
Extracting ECI-Target RandomLayout.csv
Extracting ColorTargetRecommendation.pdf
Extracting SampleDataSet Sorted by ID.txt
Extracting SampleDataSet Sorted by Loc.txt
Everything is Ok
Files: 8
Size: 1978871
Compressed: 504660

所以我猜测,在通过QProcess执行 7zip 时存在路径问题。 虽然我可能错了。 有任何想法?

PS: 我从这里下载了这个随机压缩文件: http://www.eci.org/_media/downloads/eci_2002_target/eci2002win.zip

编辑:我尝试将 QDir::toNativeSeparators() 放在路径中,以转换为 Windows'分隔符:

extractArguments <<"-o"" + QDir::toNativeSeparators(installPath) +""";//extract to installdir
extractArguments <<""" + QDir::toNativeSeparators(currentPath) +""";

这也不起作用这是我的应用程序的新控制台输出:

7za.exe x -y -o"D:ProjectsExtractTestbuild-Verpacker2-Desktop_Qt_5_3_MSVC2013_OpenGL_32bit-DebugBlaBla""C:UsersJanSAppDataLocalTempeci2002win.zip"
started
7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Error:
cannot find archive
时间:原作者:5个回答

0 0

由于Kamil没有回答,我自己给了它:

调用 7zip的正确方法是

7za.exe x -y"-oD:ProjectsExtractTestbuild-Verpacker2-Desktop_Qt_5_3_MSVC2013_OpenGL_32bit-DebugBlaBla""C:UsersJanSAppDataLocalTempeci2002win.zip"

7zip不喜欢 -o 之后的"

原作者:
...