Запуск 7zip из QProcess выдает ошибку не удается найти архив

Я работаю над приложением, созданным с помощью Qt5, которое загружает .zip-файл во временный каталог и извлекает .zip-файл в указанный каталог.

Я уже успел скачать .zip-файл и теперь пытаюсь распаковать его с помощью 7zip. Я использую QProcess для запуска 7Zip.

Вот файловая структура моего Qt-build-kit-thingy:

build-ExtractTest-Desktop_Qt_5
7za.exe x -y -o"D:\Projects\build-ExtractTest-Desktop_QtQDir::toNativeSeparators()3_MSVC2013_OpenGL_32bit-Debug\BlaBla" "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
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:\Projects\build-ExtractTest-Desktop_QtQDir::toNativeSeparators()3_MSVC2013_OpenGL_32bit-Debug\BlaBla" "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:\Projects\build-ExtractTest-Desktop_QtQDir::toNativeSeparators()3_MSVC2013_64bit-Debug>7za.exe x -y -o"D:\Projects\build-ExtractTest-Desktop_QtQDir::toNativeSeparators()3_MSVC2013_OpenGL_32bit-Debug\BlaBla" "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:\Users\js\AppData\Local\Temp\eci2002win.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

Итак, я предполагаю, что при выполнении 7zip через QProcess возникает проблема с путем. Хотя я могу ошибаться. У кого-нибудь есть идеи?

PS: я скачал этот случайный zip-файл отсюда: 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:\Projects\ExtractTest\build-Verpacker2-Desktop_Qt_5_3_MSVC2013_OpenGL_32bit-Debug\BlaBla" "C:\Users\JanS\AppData\Local\Temp\eci2002win.zip"
started

7-Zip (A) 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18


Error:
cannot find archive

person jsf    schedule 06.03.2015    source источник
comment
Вы передаете путь к архиву с косой чертой / в Windows, это не сработает.   -  person tux3    schedule 06.03.2015
comment
Это тоже не работает, см. редактирование.   -  person jsf    schedule 06.03.2015
comment
попробуйте удалить \ из списка аргументов - QProcess должен нормализовать аргументы самостоятельно   -  person Kamil Klimek    schedule 06.03.2015
comment
Да, это сработало! Спасибо Камиль. Если вы сделаете свой комментарий ответом, я приму его.   -  person jsf    schedule 06.03.2015


Ответы (1)


Поскольку Камиль не ответил, даю сам:

Правильный способ вызова 7zip:

7za.exe x -y "-oD:\Projects\ExtractTest\build-Verpacker2-Desktop_Qt_5-oMSVC2013_OpenGL_32bit-Debug\BlaBla" "C:\Users\JanS\AppData\Local\Temp\eci2002win.zip"

7zip не любит " после -o.

person jsf    schedule 20.03.2015