代码之家  ›  专栏  ›  技术社区  ›  0xC0DEFACE

在C++中通过系统()使用7Zip

  •  1
  • 0xC0DEFACE  · 技术社区  · 15 年前

    我正在尝试使用7-zip通过 system() 在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 是正在添加的特定文件的迭代器。

    3 回复  |  直到 15 年前
        1
  •  4
  •   John Knoeller    15 年前

    看起来好像有什么东西在去掉第一个参数的引号。您可以使用额外的引号来尝试解决此问题,也可以使用win32 api获取7z.exe与MS-DOS兼容的短路径名。 GetShortPathName

    短路径中没有空格,它将类似于“c:\progra~1\7-zip\7z.exe”

        2
  •  3
  •   Ibrahim    15 年前

    您是否尝试过逃离这些空间,例如“c:\program\files\7-zip\7z.exe”?虽然我不知道System()的细节,但这可能有效。

        3
  •  0
  •   user153062    15 年前

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