0

いくつかのフォルダを圧縮しようとしています。それらは異なるパスを持ち、同じディレクトリに属しません。

私が与えるコマンドライン引数をテストしましたが、動作しますが、c# から動作させることはできません:

string destination = "some path\\name.7z";
string pathToZip = "path to zip\\7z.exe";  // or 7za.exe
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = pathToZip;
p.Arguments = "a \"" + destination + "\" \"";
// room for the foreach - but even one directory doesn't work right now
   p.Arguments += directoryPath + "\" \"";
p.Arguments += "\" -mx=9 -aoa";
Process x = Process.Start(p);

7z.exe を使用すると、まばたきします。7za.exe を使用すると、典型的なコマンド ライン zip シーケンスが得られ、ファイルが圧縮され、アーカイブに追加され、アーカイブが作成されます。

次に、そのファイルを右クリック、開く、またはダブルクリックすると、無効なアーカイブ ( Can not open file "name.7z" as an archive) であることがわかります。7za を使用してコマンド ラインで抽出してみてください - 同じことです。

編集:私は解決策を見つけました:

私の問題は-aoaオプション(上書きに使用したもの)でした-削除すると機能しました。

4

3 に答える 3

1

このコードは私にとってはうまくいき、次の中にファイルを含むディレクトリをパックします:

string destination = @"c:\my test.7z";
string pathToZip = @"C:\Program Files\7-Zip\7z.exe";
string directoryPath = @"c:\my test";

ProcessStartInfo p = new ProcessStartInfo();
p.FileName = pathToZip;
p.Arguments = string.Format("a -mx=9 \"{0}\" \"{1}\"", destination, directoryPath);

Process x = Process.Start(p);
于 2012-07-19T19:40:58.023 に答える
0

7za.exeはコマンドラインプログラムです。この場合はこれを使用する必要があります。

なぜ""コマンドラインに追加するのですか?それが問題を引き起こしている可能性があります。

また、周りに物を置いてください"。最後に2つを埋めないでください。これは、問題の原因になります。

于 2012-07-19T19:32:47.030 に答える
0

コマンドラインが機能する場合は、別の開始関数を使用してください。exeへのパスを取得するもの、および2番目のパラメーターのコマンドラインパラメーター。

ここを見てください

コマンドラインが機能する場合、これが最善の方法かもしれません。

于 2012-07-19T19:43:23.720 に答える