質問
私はWindows XPマシン上でC ++でsystem()
機能を経由してファイルを圧縮する7 - ジップを使用しようとしています。
私が試した:
(どのシステム(ことにフォーマット)は、受信したであろう)
"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
が追加取得される特定のファイルへのイテレータです。
解決
それが見えます。あなたは試してみて、この問題を解決するために、余分な引用符で遊んことができ、またはあなたは、Win32 API <のhref = "http://msdn.microsoft.com/en-で7z.exeのためにMS-DOS互換の短いパス名を取得することができます私たち/ライブラリ/ aa364989(VS.85).aspxの」RELを= "nofollowをnoreferrer"> GetShortPathName の
短いパスにスペースを持っていないだろう、それは次のようになります "C:\ PROGRA〜1 \ 7-ZIPの\ 7Z.EXE"
他のヒント
あなたは、スペース、すなわち ":\プログラム\ファイル\ 7-ジップの\ 7z.exe C" を脱出しようとしたことがありますか?私はシステムの詳細を知らないが、それは、うまくいくかもしれない()。
別のアプローチは、のCreateProcess <を使用することです/>のWindows API内の関数。そのマニュアルに従って
:それは「\プログラムファイルC」にスペースを扱うことができます。