Использование 7-zip через system() в С++
Вопрос
Я пытаюсь использовать 7-Zip, чтобы заархивировать файл через system()
функция C++ на компьютере с Windows XP.Я пытался:
(отформатирован так, как получил бы system())
"C:\Program Files\7-Zip\7z.exe" a -tzip "bleh.zip" "addedFile.txt"
который выплюнул ошибку
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Я попробовал несколько подобных альтернатив, но пока не нашел решения.
Я хочу попробовать запустить его прямо из каталога установки, чтобы, пока у пользователя установлен 7-Zip, он мог работать.Это для домашнего коммунального применения.
РЕДАКТИРОВАТЬ:по запросу это реальные строки кода:
std::string systemString = "\"C:\\Program Files\\7-Zip\\7z.exe\" a -tzip \"" + outDir + projectName + ".zip" + "\" \"";
//...
std::string finalSystemString = systemString + *i + "\"";
system( finalSystemString.c_str() );
*i
— это итератор для конкретного добавляемого файла.
Решение
похоже, что-то удаляет кавычки вокруг первого аргумента.Вы можете поиграть с дополнительными кавычками, чтобы попытаться исправить это, или вы можете получить короткий путь, совместимый с MS-DOS, для 7z.exe с помощью Win32 API. GetShortPathName
В коротком пути не будет пробелов, это будет что-то вроде «C:\PROGRA~1\7-ZIP\7Z.EXE».
Другие советы
Пробовали ли вы выйти из пробелов, т.е.«C:\Program\Files\7-Zip\7z.exe»?Это может сработать, хотя я не знаю особенностей system().
Другой подход заключается в использовании Создатьпроцесс функция в Windows API.Согласно документации, он может работать с пробелами в «C:\Program Files».