Helionix

Unexpected end of archive в ZIP: что делать

Как диагностировать обрезанный ZIP, проверить полноту скачивания, понять состояние последней записи и сохранить целые файлы до точки обрыва.

Сообщение Unexpected end of archive означает, что программа достигла физического конца файла раньше, чем ожидала по структуре ZIP. Чаще всего контейнер скачан или скопирован не полностью. Реже повреждены длины и смещения в заголовках либо отсутствует следующий сегмент многотомного набора.

Проверить доступную часть можно в инструменте восстановления ZIP Helionix. Но первым действием должно быть получение полной копии, если источник ещё доступен: отсутствующие байты невозможно достоверно сгенерировать из оставшегося фрагмента.

Как отличить неполную загрузку

  • размер меньше указанного на сайте или у отправителя;
  • загрузка в браузере завершилась ошибкой или была прервана;
  • облачный клиент показывает статус синхронизации;
  • ошибка возникает у файлов, расположенных ближе к концу;
  • внешний SHA-256 не совпадает с опубликованным;
  • файл имеет временное расширение или пометку частичной загрузки.

Что делать по порядку

  1. Не редактируйте и не дописывайте проблемный ZIP вручную.
  2. Сохраните копию для анализа.
  3. Сверьте размер и SHA-256 с источником.
  4. Скачайте архив повторно под новым именем.
  5. Если полной копии нет, откройте восстановление обрезанного ZIP.
  6. Просканируйте записи до точки обрыва.
  7. Сохраните только успешно декодированные файлы.
  8. Проверьте новый архив и сами документы.

Что происходит с последней записью

Если обрыв пришёлся на сжатый поток, декодер может выдать часть исходных данных, но CRC не совпадёт или вообще не будет рассчитан до конца. Такой фрагмент не является целым файлом. Записи, полностью расположенные до него, имеют больше шансов на восстановление. Элементы после точки обрыва физически отсутствуют, даже если их имена сохранились в отдельном источнике.

Обрыв и повреждённый каталог

ВариантКаталогДанные
Обрезан только самый конецEOCD или часть каталога отсутствуетЛокальные записи могут быть целыми
Обрезан поток последнего файлаКаталог обычно отсутствуетПоследний файл неполный, ранние могут читаться
Повреждены байты в серединеМожет открыватьсяОдна или несколько записей дают CRC error
Нет следующего томаСтруктура распределена по частямНужно собрать весь комплект

Почему нельзя дополнять файл нулями

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

Если ZIP получен из мессенджера или почты

Убедитесь, что клиент действительно скачал вложение, а не показывает удалённую заглушку. Попросите отправителя сверить размер и хеш либо передать файл через другой доверенный канал. Если обе стороны получили одинаковый дефектный ZIP, проблема возникла до отправки и потребуется резервная копия исходной папки.

Безопасность восстановления

Ограничивайте общий распакованный объём и глубину путей. Найденная сигнатура может оказаться ложной внутри случайных данных. Не запускайте спасённые исполняемые файлы и не извлекайте неизвестный набор в рабочую папку. Пройдённый CRC подтверждает согласованность, но не безопасность.

Сравнение двух неполных копий

Иногда файл скачивали несколько раз, и копии обрывались в разных местах. Сравните их внешний размер и побайтовые хеши общих диапазонов. Более длинная копия не обязательно полностью правильна, но может содержать дополнительные целые записи. Не склеивайте фрагменты автоматически: различия могут возникнуть из разных версий исходника. Безопаснее отдельно просканировать обе копии, подтвердить CRC найденных файлов и объединить результаты на уровне новых записей, сохранив происхождение каждого элемента.

Частые вопросы

Можно ли продолжить скачивание?

Только если источник и клиент поддерживают корректное возобновление. После завершения всё равно сравните ожидаемый размер или SHA-256.

Почему список виден, но извлечение обрывается?

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

Восстановится ли последний файл частично?

Иногда декодер возвращает фрагмент, но без совпавшего CRC он остаётся неполным и требует проверки профильным приложением.

Итог

Unexpected end почти всегда означает нехватку ожидаемых байтов. Сначала получите архив повторно. Если это невозможно, спасайте целые записи до места обрыва, не выдавайте частичный поток за оригинал и создавайте отдельный новый ZIP.

Проверить обрезанный ZIP →