*.zip
Ionic.Zip を使用して作成しています。ただし、*.zip
同じファイルが複数回、場合によっては 20 回含まれており、ZIP形式はそれをまったく利用していません。
さらに悪いことにOutOfMemoryException
、ファイルをMemoryStream
.
ファイル間の冗長性を利用した圧縮用の.NETライブラリはありますか?
ユーザーは自分でファイルを解凍するため、特殊な形式にすることはできません。
*.zip
Ionic.Zip を使用して作成しています。ただし、*.zip
同じファイルが複数回、場合によっては 20 回含まれており、ZIP形式はそれをまったく利用していません。
さらに悪いことにOutOfMemoryException
、ファイルをMemoryStream
.
ファイル間の冗長性を利用した圧縮用の.NETライブラリはありますか?
ユーザーは自分でファイルを解凍するため、特殊な形式にすることはできません。
いいえ、よく知られている API (GZip、PPMd、Zip、LZMA など) によって公開されている API はありません。それらはすべてファイル (より具体的にはバイトのストリーム) ごとに動作します。
つまり、tar-ball 形式を使用してすべてのファイルを連結してから、圧縮アルゴリズムを使用することができます。
または、独自のチェックを実装するのは簡単です: ファイルのハッシュを計算し、それをハッシュ ファイル名辞書に格納します。次のファイルのハッシュが一致する場合は、このファイルを完全に無視するか、その名前をメモして別のファイルに保存して重複をマークするなど、何をしたいかを決めることができます。
はい、7-zipです。使用できる SevenZipSharp ライブラリがありますが、私の経験から、コマンド ラインを使用して圧縮プロセスを直接起動する方がはるかに高速です。
私の個人的な経験: 会社で SevenZipSharp を使用して最大 1GB のアーカイブを解凍しましたが、コマンド ライン インターフェイスを実行して 7-zip ライブラリを直接使用するように作り直すまで、非常に遅かったです。その後、Windows エクスプローラーで手動で解凍したときと同じくらい高速でした。
私はこれをテストしていませんが、ある回答者によると、ファイルを圧縮できる回数は?
多数の重複ファイルがある場合、zip 形式はそれぞれ個別に圧縮するため、最初の zip ファイルを圧縮して、重複する zip 情報を削除できます。