uShell
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Как добиться того же от Winrar? Он хотя бы умеет так? | Да, умеет. В GUI внизу диалога распаковки есть галка "Оставлять повреждённые файлы" ("Keep broken files"), в консоли её включает параметр -kb. Кстати, интересный вопрос: если задана опция -kb и сжатые данные реально повреждены, будет ли WinRAR при распаковке останавливаться по достижении сжатого и/или несжатого размера? Цитата: я вообще не понимаю, какое ограничение в 4 гб может быть, когда у многих уже на борту 32 гб озу... | Это претензии к Windows. Даже 64-битная система содержит это ограничение; по-видимому, в память проецируется весь файл. Это ограничение можно обойти (например, можно написать загрузчик EXE-файлов, который загружает в память только исполняемую часть, а не весь архив), но разработчики Windows почему-то так делать не хотят. Цитата: Интересно, как их отличить, если CRC32 вдруг оказалась равной 0x08074b50 | Если есть и легко доступна central directory, то CRC32 и размеры дублируются в ней безо всяких неоднозначностей - или я ошибаюсь? Вот при восстановлении ZIP-архива придётся повозиться. Думаю, сначала имеет смысл проверить данные после data descriptor: если там идёт правильный заголовок следующего файла, то размер дескриптора определяется однозначно. Если этот метод не сработал, то, полагаю, нужно перебрать два варианта (сигнатура-CRC-сжатый-размер и CRC-сжатый-размер) и проверить распаковку: во-первых, будет ли по достижении сжатого размера встречен конец Deflate-блока; во-вторых, будет ли размер после распаковки соответствовать указанному. Я тут погорячился: если после этого файла нет заголовка следующего, то архив либо сильно нестандартный, либо битый и сам data descriptor, находящийся рядом с местом повреждения, тоже доверия не вызывает. Придётся гадать по другим признакам: как записаны дескрипторы других файлов (с сигнатурой али без), найдена ли central directory и т.п. Конкретный алгоритм, разумеется, нужно доводить до ума на реальных данных. | Всего записей: 1137 | Зарегистр. 12-06-2019 | Отправлено: 20:58 18-09-2024 | Исправлено: uShell, 21:18 18-09-2024 |
|