Предположим, из сети загружен большой ЗИП-архив, и проверка CRC показала, что нек-рые файлы в архиве попорчены. Нужно найти их "архивные" начало(смещение в архиве) и конец, чтобы потом перекачать только поломанную часть.
На данный момент я вожусь с либой zip2.3, пытаясь вставить дамп смещения файла в то место, где она будет его читать. Но это не дело.
Если есть предложения получше - пишите
У тебя три возможных случая -1. Потерян кусок файла
2. Вставлен лишний кусок
3. Произошло искажение (в том числе 1+2)Перейди на более надёжный протокол, хитрый алгоритм проверки ZIP обойдётся гораздо дороже.
Вариант решения - распаковываешь что распаковалось, остальные файлы создаёшь с нулевым содержимым (имена и размеры ты знаешь из каталога ZIP). Запаковываешь тем же алгоритмом и сравниваешь выходной поток с принятым файлом. Как только пошла разница - с этого места нужно качать заново.
Я использовал Reget для закачки, он изначално резервирует файл размера закачки, а потом в него пишет. При сбоях маркеры закачки асинхронизируються с реально закачаным - в рез. часть архива в мусор. Проблема была в том, что сам Reget не сочетал возможности частичной закачки файлов архива И использования куков от браузера - только прямым редактированием конфига.
Насчет попыток найти начало-конец поврежденного модификацией unzip завершились неудачей - код дико кривой.