web-dev-qa-db-ja.com

7-異なるフォルダから多くのファイルを圧縮しますか?

7za.exeを使用して、さまざまなフォルダのさまざまな名前の多数のファイルを1つの7-Zipアーカイブに追加したいと思います。これは単純なはずですが、大きな苦痛であることが判明しました。

パス(7za a out.7z @list.txt)を含むファイルを作成しましたが、ファイルが多すぎる(〜100)と失敗します。どうやら引数ファイルの内容がコマンドラインバッファにプッシュされているようです[編集:これは私の側の誤った情報である可能性があります。理由ではありませんでした]、これは小さすぎます(追加するファイルの数が100万を超えています)。

7zaの動作方法により、ファイルを1つずつ追加してプロセスを分割することはできません。次のファイルを追加すると、アーカイブのコピーが作成され、ファイルがコピーに追加され、最後に元のファイルが置き換えられます。 。アーカイブのサイズが100MBに達すると、これは非常に遅くなります。

これまでのところ、ループ内で毎回12個のファイルを追加することにより、2つのアプローチを組み合わせて使用​​していますが、これは信頼性の低いハッキングであり、それでも非常に低速です。それを行うためのより良い方法はありますか?

7-ZipラッパーDLL(私はC#プログラマーです)を使用しようとしましたが、どれも確実に機能せず、代わりに7zaを使用するように繰り返し提案されました。

4
mafu

私が問題に取り組む愚かな方法のために、本当の理由を理解するのに多くの時間がかかりました。これは、7Zipの バグ が思いもよらなかった場所にあるためです。

CLIバージョン4.57でリストファイルを使用すると、誤ったエラー通知が発生します。リストファイルに、異なるディレクトリ内の同じ名前のファイルを指す絶対パスの行がいくつか含まれている場合(相対パスが機能しているようです)、「ファイル名の重複」エラーが発生します。

リストファイル内の絶対パスを使用して、異なるディレクトリにある同じ名前の2つのファイルを使用して問題を再現することができました。

元の質問では、一度に1つまたは少数のファイルのみを追加すると、リストファイルに(誤って)そのような「重複ファイル名」が含まれていなかったため、機能しました(アーカイブファイル自体は問題なく作成されました)。

正式には、機能と呼ばれます。それについてはよくわかりませんが、文書化されていないために私や他の人を混乱させたことは間違いありません。

4
mafu