Приведет ли добавление файла в zip-архив к перезаписи всего файла?

Приведет ли добавление файла в zip-архив к перезаписи всего файла?

Если у меня есть большой zip-файл и я добавлю в него файл, создаст ли Windows копию файла, а затем удалит оригинал, вызвав очень большое «усиление записи», или просто добавит файл?

(Возможно, имеет значение, SSD это или HDD?)

решение1

Хотя Формат файла zip был определен для обеспечения возможности быстрого добавления без повторного копирования всего архива, но я не знаю программы Zip/7Zip, которая бы это делала.

Архив Zip содержит внутренний каталог, который обеспечивает прямой доступ к любому включенному элементу. Каталог хранится в конце архива, и все элементы, включая каталог, идентифицируются заголовком.

В принципе, добавление нового элемента в архив может быть выполнено путем добавления его в файл архива, а затем добавления нового каталога. Однако сбой компьютера до того, как новый каталог был полностью записан и сброшен на диск, может привести к тому, что в конце архива останется мусор.

Хотя теоретически это все еще можно восстановить, просканировав конец архива на предмет заголовка последнего записанного каталога, программа, которая просто ожидает найти каталог в конце файла, потерпит неудачу, сообщив о повреждении архива.

Я протестировал добавление файла в архив для двух продуктов Zip и для 7Zip, запрашивая адрес диска архива до и после операции. Я использовал для этого fsutil file queryextents команда.

Ни один из трех продуктов не пытался оптимизировать операцию добавления. Все три перекопировали весь архив при добавлении нового элемента.

Мой вывод таков: хотя такой оптимизирующий продукт может существовать, лучше всего проверить, является ли ваш продукт одним из таких. Без тестирования по умолчанию следует предположить, что архив будет перескопирован.

Связанный контент