1

7-Zipを使用してsystem()、WindowsXPマシンの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

何かが最初の引数の周りの引用符を削除しているように見えます。追加の引用符を試してこれを修正するか、Win32APIGetShortPathNameを使用して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

もう1つのアプローチは、 WindowsAPIでCreateProcess関数を使用することです。ドキュメントによると、「C:\ProgramFiles」のスペースを処理できます。

于 2010-02-09T08:02:30.860 に答える