web-dev-qa-db-ja.com

ファイルをZipファイルに追加すると、ファイル全体が書き換えられますか?

大きなZipファイルがあり、そこにファイルを追加した場合、Windowsはファイルのコピーを作成してから元のファイルを削除し、非常に大きな「書き込み増幅」を引き起こしますか、それとも単にファイルに追加しますか?

(SSDとHDDのどちらが重要か?)

7
ispiro

Zipファイル形式 は、アーカイブ全体を再コピーせずに高速に追加できるように定義されていますが、それを行うZip/7Zipプログラムについては知りません。

Zipアーカイブには、含まれているアイテムに直接アクセスできる内部ディレクトリが含まれています。ディレクトリはアーカイブの最後に保存され、ディレクトリを含むすべてのアイテムはヘッダーで識別されます。

原則として、新しいアイテムをアーカイブに追加するには、アイテムをアーカイブファイルに追加してから、新しいディレクトリを追加します。ただし、新しいディレクトリが完全に書き込まれ、ディスクにフラッシュされる前にコンピュータに障害が発生すると、アーカイブの最後にゴミが残る場合があります。

理論的には、アーカイブの最後から最後に書き込まれたディレクトリのヘッダーをスキャンすることでこれを回復できますが、ファイルの最後でディレクトリを見つけることを期待するプログラムは失敗し、破損したアーカイブを通知します。

2つのZip製品と7Zipのアーカイブへのファイルの追加をテストして、操作の前後にアーカイブのディスクアドレスを照会しました。そのために使用した fsutil file queryextents コマンド。

3つの製品のいずれも、追加操作の最適化を試みていません。 3つとも、新しいアイテムを追加するときにアーカイブ全体を再コピーしました。

私の結論は、そのような最適化製品が存在するかもしれないが、あなたの製品がそのようなものであるかどうかをテストすることが最善であるということです。テストを行わない場合、デフォルトの想定では、アーカイブを再コピーする必要があります。

7
harrymc