Вопрос

Я пытаюсь использовать 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».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top