1

我正在尝试使用 7-Zipsystem()在 Windows XP 机器上通过 C++ 中的函数压缩文件。我试过了:

(格式化为 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是要添加的特定文件的迭代器。

4

3 回答 3

4

看起来有些东西正在剥离第一个参数周围的引号。您可以使用额外的引号来尝试解决此问题,或者您可以使用 Win32 API GetShortPathName获取 7z.exe 的 MS-DOS 兼容短路径名

短路径中不会有空格,它将类似于“C:\PROGRA~1\7-ZIP\7Z.EXE”

于 2010-02-09T05:56:07.307 回答
3

您是否尝试过转义空格,即“C:\Program\ Files\7-Zip\7z.exe”?尽管我不知道 system() 的细节,但这可能会起作用。

于 2010-02-09T05:47:37.153 回答
0

另一种方法是使用 Windows API 中的CreateProcess函数。它可以根据其文档处理“C:\Program Files”中的空格。

于 2010-02-09T08:02:30.860 回答