Что такое zip файлы и можно их удалять
Загадочный ZIP-файл. Что это и как его получить?
Создание zip-архивов позволяет экономить память, перемещать и передавать файлы между пользователями, а также удобно организовывать хранение документов. Сегодня мы расскажем что из себя представляет zip-формат и как с ним работать.
Что это такое?
Zip – универсальный формат сжатия и архивации файлов. Файл любого типа после архивации с помощью специализированных программ или встроенных функций Windows приобретает именно это разрешение.
Как открыть файл?
Рассмотрим как открыть zip-файл с помощью встроенных возможностей Windows:
Теперь все файлы архива извлечены в указанную папку.
Как его получить?
Существует два способа добавить несколько файлов в архив. Для первого способа:
Для второго способа:
Архиваторы
На сегодняшний момент кроме стандартного архиватора Windows существует множество специализированных программ, с расширенным арсеналом функций. Мы расскажем о самых популярных программах:
Использование архивов типа zip экономит время и дарит множество новых возможностей пользователю. Не стоит пугаться неизвестных форматов и программ, работа с ними практически интуитивная и значительно облегчит вашу жизнь.
Что такое zip-файл?
Что такое zip-файл?
Возможность сжатия файлов очень важна для цифрового рабочего пространства. Мы можем отправлять больше данных на более высоких скоростях, чем когда-либо, поэтому zip-файлы являются таким популярным бизнес-инструментом по всему миру. Так что на самом деле представляет собой zip-файл?
Подробнее о zip-файлах
Zip — это широко применимый формат архивирования файлов, который используется для сжатия одного или нескольких файлов в одном месте, что позволяет сократить их общий размер и упрощает передачу данных. Zip-файлы в принципе работают так же, как и стандартная папка на вашем компьютере. Однако при использовании заархивированных файлов содержимое папки сжимается, что приводит к сокращению объема данных, используемых вашим компьютером. Если вы хотите узнать, как сделать размер файла меньше, в ваших интересах изучить формат файла zip.
Как работают zip-файлы?
Zip-файлы кодируют информацию в меньшее количество битов, тем самым уменьшая размер файла или файлов за счет удаления избыточных данных. Это так называемое «сжатие данных без потерь», которое гарантирует сохранность всех исходных данных. Давайте рассмотрим небольшой пример, чтобы понять, как это работает.
Представим файл, который содержит следующие предложения:
Каждое слово в этом файле появляется дважды. Если каждый символ и пробел в файле равны одной единице памяти, то размер всего файла будет составлять 110 единиц. Однако, если вы создадите нумерованный код для файла, данные можно выразить другим способом:
Если записать его по-другому, предложение будет выглядеть так: 123456789896712345. Это означает, что первоначальный размер файла в 110 единиц можно уменьшить всего до 18 единиц, что является значительной экономией. Формат файла zip использует алгоритмы сжатия без потерь именно для этого, позволяя вам выразить ту же информацию более эффективным способом, просто удалив избыточные данные из файла.
Когда zip-файлы могут пригодиться в работе?
Существует широкий спектр возможностей применения сжатых файлов для бизнеса. Возможность отправлять большое количество файлов по электронной почте — это настоятельная необходимость. Скажем, вам нужно отправить большой пакет файлов коллеге или клиенту. Вместо того, чтобы кропотливо загружать файлы по одному в виде вложений электронной почты, и ждать, пока загрузится каждый файл, прежде чем прикрепить следующий, вы можете просто заархивировать все документы сразу и прикрепить один zip-файл к своему электронному письму. Также рассмотрите возможные варианты хранения, которые предоставляет формат zip. Вместо того, чтобы хранить все файлы для бизнеса в их исходном размере, заархивируйте их, что поможет значительно сократить объем места, занимаемого вашими старыми файлами.
Каковы преимущества и недостатки формата файла zip?
Теперь, когда вы узнали немного больше о сжатых файлах, важно изучить потенциальные преимущества и недостатки использования этого типа архивного файла, особенно в том, что касается уменьшения размера файла. Во-первых, и это наиболее очевидно, формат zip предоставляет пользователям возможность сэкономить место и повысить эффективность работы своего компьютера. Он также является одним из эффективных способов улучшения передачи данных по электронной почте, поскольку вы можете отправлять электронные письма намного быстрее благодаря уменьшению размеров файлов. Кроме того, формат файла zip зашифрует ваши личные данные, что всегда важно при отправке файлов через Интернет. В общем, это на самом деле очень простой способ максимально увеличить эффективность работы с файлами. Просто щелкните правой кнопкой мыши на любом файле, который вы хотите сжать, нажмите «Отправить» и выберите «Сжатая (заархивированная) папка». Готово!
Однако есть ряд недостатков, связанных с архивными файлами zip, о которых вам следует знать. Самое главное, что некоторые файлы, например MP3 и JPG, уже нельзя сжать, чтобы уменьшить их размер. Следовательно, если вы активно работаете с видеофайлами и файлами изображений, вероятно, формат zip не сможет помочь вам сэкономить много места. Также нужно подумать о безопасности сжатых файлов. Несмотря на то, что для сжатых файлов выполняется шифрование, у вас нет возможности узнать, что происходит с вашими данными, когда они изначально загружаются в приложение для сжатия файлов, и вы не можете предотвратить их попадание в чужие руки. Конечно, вы можете воспользоваться встроенными функциями архивирования, которые доступны в Windows и Apple, но если вы используете внешнее приложение для сжатия от сторонних разработчиков, безопасность данных всегда будет под угрозой. Стоит также не забывать, что файлы с расширением zip могут быть повреждены, а в некоторых случаях поврежденные данные могут негативно повлиять на всю папку zip.
Что такое 7z-файл?
Изучая тему zip-файлов, вы, вероятно, встретите термин «файл 7z» или «7-zip». Что же представляет из себя файл 7z и чем он отличается от формата zip? Он очень похож на другие форматы архивирования, такие как zip и rar, но, что особенно важно, в файлах 7z используется более высокая степень сжатия. Это означает, что в каждом сжатом файле будет меньше мегабайт, что позволит пользователям экономить еще больше места. Хотя процесс сжатия файлов 7z может занять немного больше времени, вероятно, этот формат подойдет для тех, кто ищет наиболее эффективный способ уменьшения размеров файлов.
Какие существуют альтернативы zip-файлам?
Конечно, формат файла zip — не единственный вариант, используемый для сжатия файлов. Существует много различных типов архивных файлов, включая rar, tar и 7z, а также архиваторы и программное обеспечение для сжатия файлов, например WinRAR, ZIPx и PeaZip. Но, как мы уже упоминали, с файлами zip могут возникать различные проблемы, включая длительное время ожидания, дублирование файлов, ограничения на размер файлов и их повреждение.
Вместо того, чтобы ломать голову над разными приложениями для сжатия файлов, используйте облачное хранилище, которое может стать альтернативой файлам zip, полностью устранив необходимость в сжатии данных. Например, в Dropbox вам не нужно проходить долгий, многоэтапный процесс для того, чтобы сохранить или отправить большие файлы. Просто отправьте файл или папку в исходном размере без сжатия, нажав «Поделиться». Вы можете хранить и делиться файлами до 50 ГБ, используя быстрый и надежный способ обмена файлами, не загружая их в папку «Входящие» и не занимая место на диске своего компьютера. Тем не менее, даже если вам необходимо работать со сжатыми файлами, Dropbox может стать идеальной платформой, предлагающей функции предварительного просмотра файлов zip и rar, сжатия после загрузки и поддержки редактирования.
Заключительные соображения
В целом, файлы zip — это более эффективный способ хранения или передачи данных. Тем не менее, это не единственный способ сжатия файлов, поэтому обязательно обратите внимание на альтернативные варианты, чтобы выбрать лучшую систему архивирования, исходя из ваших потребностей.
Как открывать файлы формата ZIP на любом устройстве
Вы получили файл ZIP, но, будучи ещё не очень опытным в области информационных технологий и новых технологий, не знаете, как извлечь содержимое. При таких обстоятельствах я бы сказал, что вы оказались в правильном месте. Если вы уделите мне несколько минут вашего внимания, я покажу вам, как открывать ZIP-файлы.
ZIP-файлы – это не что иное, как сжатые архивы, то есть файлы, которые содержат внутри себя другие файлы любого типа, собранные вместе и уменьшенные до минимального количества байтов, чтобы занимать мало места. Поэтому они могут быть особенно удобны в различных обстоятельствах.
Как открыть ZIP файлы на ПК
Если Вас интересует, как открыть файлы ZIP на вашем компьютере с установленной Windows? Тогда решения, на которые вы должны положиться, и указания, которым вы должны следовать, приведены ниже.
Менеджер архивов по умолчанию
Чтобы открыть ZIP-файлы, сохраненные на вашем компьютере, вы можете сначала обратиться к стандартному диспетчеру сжатых архивов Windows, который позволяет сжимать и распаковывать файлы, относящиеся к рассматриваемому типу, не прибегая к использованию сторонних решений.
Чтобы использовать его, найдите значок ZIP-файла, который вы хотите извлечь, щелкните правой кнопкой мыши по нему и выберите пункт Извлечь все в контекстном меню.
В качестве альтернативы тому, что я только что указал, вы можете просто дважды щелкнуть по интересующему ZIP-файлу и затем перетащить файлы, которые вы хотите извлечь из архива, из открытого окна, освободив его в том положении, которое предпочитаете.
Помните, что если ZIP-файл, который вы хотите открыть, защищен паролем, вам также будет предложено ввести его, чтобы распаковать.
Вы предпочитаете использовать сторонние инструменты для открытия ZIP-файлов в Windows, включающие дополнительные функции? В таком случае, я предлагаю обратиться к 7-Zip. Это бесплатная программа, широко используемая и высоко ценимая пользователями. Она с открытым исходным кодом и позволяет разархивировать файлы ZIP, RAR, 7Z и т.д. Она также позволяет создавать ZIP-архивы и архивы в других форматах, а также создавать / извлекать запароленные и многотомные защищенные архивы.
Чтобы скачать её на ваш компьютер, зайдите на соответствующий сайт и нажмите ссылку Download, в соответствии с версией Windows, используемой на вашем ПК (64-битная или 32-битная), в верхней части страницы.
В дополнение к тому, как я уже указал, в контекстном меню вы также можете выбрать другие параметры для извлечения: указать точное местоположение в Windows, в которое нужно извлекать файлы, или извлечь конкретные элементы.
Имейте в виду, чтобы открывать защищенные паролем ZIP-файлы, при извлечении архива вам будет предложено ввести его.
Другие программы для открытия ZIP файлов на ПК
Ни одно из предложенных мною решений по открытию ZIP-файлов в Windows не убедило вас, и вы хотели бы, чтобы я порекомендовал какую-нибудь альтернативу? Сказано – сделано!
Вот список дополнительных программ, полезных для этой цели:
Как открыть ZIP файлы на Mac
Теперь посмотрим, как открыть ZIP-файлы на Mac. Ниже вы найдете те придложения, которые, по моему скромному мнению, представляют лучшие решения такого типа. Испытайте их прямо сейчас, я уверен, что они вас удовлетворят.
Стандартная утилита сжатия
Compression Utility – «стандартный» инструмент компьютеров Apple, благодаря которому можно открывать различные типы сжатых архивов и создавать ZIP-файлы. Использовать его очень просто.
На самом деле, всё, что вам нужно сделать, это найти значок ZIP-файла, к которому вы хотите перейти, щелкнуть по нему правой кнопкой мыши и выбрать Открыть в появившемся контекстном меню, чтобы извлечь содержимое в текущей позиции.
В качестве альтернативы того, что указал вам выше, вы можете открыть интересующий вас ZIP-файл, просто дважды щелкнув по нему.
Имейте в виду, что если ZIP-архив, который вы хотите открыть, защищен паролем, вам будет предложено ввести его.
Теперь, когда вы видите окно Keka на столе, перетащите значок ZIP-файла, чтобы извлечь его, дождитесь начала и завершения процедуры извлечения. Содержимое ZIP-файла будет сохранено в том же месте, что и исходный сжатый архив.
В качестве альтернативы тому, что я указал выше, вы можете извлечь ZIP-архив на вашем Mac с Keka, щелкнув правой кнопкой мыши по его значку, выбрав пункт Открыть с помощью в появившемся контекстном меню, а затем → Keka.
Я также отмечаю, что если ZIP-файл, который вы хотите извлечь, защищен паролем, вам также будет предложено ввести последний, чтобы продолжить.
Другие программы для открытия ZIP файлов на Mac
Ни одно из предложенных мною решений для открытия ZIP-файлов в macOS не убедило вас, и вы хотели бы, чтобы я порекомендовал альтернативы? Нет проблем. вы можете найти их в списке ниже.
Как открыть ZIP файлы онлайн
Не хотите или не можете скачать новые программы на компьютер? В таком случае, выбирайте онлайн-сервисы, благодаря которым вы можете открыть ZIP-файл, действуя из окна браузера.
ezyZip
Если вы ищете надежный инструмент, с помощью которого вы можете извлечь ваши ZIP-файлы онлайн, вы можете положиться на ezyZip. Это бесплатный веб-сервис, который позволяет создавать и открывать сжатые архивы в различных форматах. Следует помнить только то, что он позволяет выбирать только отдельные файлы и не позволяет открывать зашифрованные сжатые архивы.
После завершения извлечения, чтобы загрузить файлы, содержащиеся в архиве, нажмите кнопку Сохранить рядом с названием каждого из них и всё готово.
Другие онлайн-сервисы для открытия ZIP-файлов онлайн
Вы ищете другие онлайн-сервисы, на которые можно положиться, чтобы открыть ZIP-файлы из окна браузера? Протестируйте дополнительные решения, относящиеся к рассматриваемой категории, перечисленные в списке ниже.
Как открыть ZIP файлы на Android
Если у вас смартфон или планшет Android и вы хотите узнать, как открыть на нём ZIP-файлы, я предлагаю вам рассмотреть инструменты, о которых пишу ниже.
Google Files
Для распаковки файлов ZIP на Android, лучший совет, который я могу дать, – использовать приложение Google Files. Это, на самом деле, файловый менеджер, среди многих функций которого также извлечение ZIP-архивов. Он бесплатный, очень простой в использовании и, как понятно из самого названия, является решением, разработанным «большим G».
Теперь, когда вы видите главный экран приложения, выберите место на вашем устройстве, где находится ZIP-файл, который нужно распаковать, используя соответствующие элементы внизу, затем нажмите на значок сжатого архива и в открывшемся окне нажмите кнопку извлечения.
Другие приложения для открытия файлов ZIP с Android
Вы ищете другие приложения, чтобы разархивировать ваши файлы ZIP с Android? Протестируйте решения, которые вы найдете в списке ниже.
ZIP файлы в Windows – как открывать, редактировать и конвертировать
Файл с расширением ZIP является сжатым файлом и является наиболее широко используемым форматом архивации, с которым вам придётся встретиться.
Наиболее распространено использование ZIP-файлов для загрузки программного обеспечения. Архивирование программного обеспечения экономит место на сервере, сокращает время, необходимое для его загрузки на ваш компьютер, и обеспечивает прекрасную организацию сотен или тысяч файлов в одном ZIP-файле.
Ещё один пример можно встретить при загрузке или обмене десятками фотографий. Вместо того чтобы отправлять каждое изображение по отдельности по электронной почте или сохранять каждое изображение одно за другим с веб-сайта, отправитель может поместить файлы в ZIP-архив, поэтому необходимо передать только один файл.
Как открыть файл ZIP
Самый простой способ открыть ZIP-файл – дважды щелкнуть по нему, и ваш компьютер покажет вам папки и файлы, содержащиеся внутри. В большинстве операционных систем, включая Windows и macOS, файлы ZIP обрабатываются внутри, без необходимости какого-либо дополнительного программного обеспечения.
Однако, существует много инструментов сжатия/распаковки, которые можно использовать для открытия (и создания!) ZIP-файлов. Есть причина, по которой их обычно называют zip / unzip tools!
Включая Windows, почти все программы, которые разархивируют ZIP-файлы, также имеют возможность архивировать их; другими словами, они могут сжать один или несколько файлов в формат ZIP. Некоторые могут также зашифровать и защитить их паролем. Если бы мне нужно было порекомендовать один или два, это был бы PeaZip или 7-Zip, – это отличные и совершенно бесплатные программы, поддерживающие формат ZIP.
Если вы не хотите использовать программу для открытия ZIP-файла, многие онлайн-сервисы также поддерживают этот формат. Онлайн-сервисы, такие как Files2Zip.com и B1 Online Archiver, позволяют просто загрузить свой ZIP-файл, чтобы просмотреть все файлы внутри, а затем загрузить один или несколько из них по отдельности. Другой пример – это ZIP Extractor, который может извлечь некоторые или все файлы из ZIP-архива непосредственно на Google Drive.
Я рекомендую использовать открывающие ZIP-архив сервисы только в том случае, если ZIP-файл имеет маленький размер. Загрузка большого файла ZIP и управление им в интернете займёт больше времени и энергии, чем просто загрузка и установка автономного инструмента, такого как 7-Zip.
Вы также можете открыть ZIP-файл на большинстве мобильных устройств. Пользователи iOS могут установить iZip бесплатно, а пользователи Android имеют возможность работать с файлами ZIP через такие инструменты, как B1 Archiver или 7Zipper.
Открытие других видов файлов ZIP
Файлы ZIPX – это расширенные файлы Zip, которые создаются и открываются с помощью WinZip версии 12.1 и новее, а также PeaZip и некоторых других аналогичных программ архивирования.
Как конвертировать ZIP файл
Файлы могут быть преобразованы только во что-то похожего формата. Например, вы не можете конвертировать файл изображения, такой как JPG, в видеофайл MP4 (по крайней мере, это не имеет смысла), равно как и конвертировать ZIP-файл в PDF или MP3.
Если это сбивает с толку, помните, что ZIP-файлы – это просто контейнеры, которые содержат сжатые версии фактических файлов. Поэтому, если внутри ZIP-файла есть файлы, которые вы хотите преобразовать – например, PDF в DOCX или MP3 в AC3 – вы должны сначала извлечь файлы одним из способов, описанных в разделе выше, а затем преобразовать эти извлеченные файлы с помощью конвертера файлов.
Поскольку ZIP является форматом архива, вы можете легко конвертировать ZIP в RAR, 7Z, ISO, TGZ, TAR или любой другой сжатый файл двумя способами, в зависимости от размера:
Дополнительная информация о файлах ZIP
Если вы защитили паролем ZIP-файл, но затем забыли пароль, вы можете использовать «взломщик» паролей, чтобы удалить его и восстановить доступ к вашим файлам. ZIP Password Cracker Pro – это одна из бесплатных программ, которая использует грубую силу для удаления пароля ZIP.
Некоторые ZIP-файлы могут иметь имя файла с другим расширением файла перед окончательным расширением «zip». Просто имейте в виду, что, как и для любого типа файла, всегда самое последнее расширение определяет, что это за файл.
Например, Photos.jpg.zip по-прежнему является файлом ZIP, потому что JPG предшествует ZIP. В этом примере архив, вероятно, назван так, чтобы быстро и легко определить, что внутри архива есть изображения JPG.
Некоторые программные средства резервного копирования создают резервные копии файлов в формате ZIP, чтобы они сжимались для экономии места, собирались вместе для более удобного поиска и содержались в общем формате, чтобы можно было открывать резервную копию даже без исходного программного обеспечения для резервного копирования. Одной из таких программ, которая делает это, является COMODO Backup.
ZIP-файл может иметь размер от 22 байт и до 4 ГБ. Этот предел в 4 ГБ применяется как к сжатому, так и к несжатому размеру любого файла в архиве, а также к общему размеру ZIP-файла.
Не так давно создатель ZIP Фил Кац представил новый формат ZIP под названием ZIP64, который увеличивает ограничение размера до 16 EiB (около 18 миллионов ТБ).
Zip – как не нужно создавать формат файлов
Zip появился 32 года назад. Можно подумать, что настолько зрелый формат должен быть отлично задокументирован. К сожалению, нет. Что же конкретно в нем не так, и каким образом его можно было бы оптимизировать? Подробно рассмотрим эти вопросы, опираясь на исходную документацию.
Вообще, есть у меня ощущение, что это касается многих форматов файлов. Они не прорабатываются, а скорее создаются разработчиками на ходу. Если в итоге такой формат становится популярен, то у пользователей возникает желание считывать и/или записывать соответствующие файлы. При этом им приходится либо делать реверс-инжиниринг, либо запрашивать спецификации. Даже если разработчик и пишет спецификацию, он зачастую не может вспомнить все допущения, которые делает его программа. В итоге они не записываются, и спецификация получается неполной. К таким форматам и относится Zip.
Если коротко, то zip-файл состоит из записей, каждая запись начинается с некоторого 4-байтового маркера, который обычно имеет следующую структуру:
* некоторые форматы требуют округления длины до ближайшего числа, кратного 4 или 16. Zip же этого не делает. Если вы видите id и не знаете, как этот тип содержимого записи структурирован, то понять, сколько байтов нужно пропустить, вам не удастся.
4.1.9 ZIP-архивы МОГУТ быть потоковыми, разделенными на сегменты (на стационарных или съемных носителях) либо «самораспаковывающимися» (SFX). SFX-архивы ДОЛЖНЫ нести в себе код извлечения для целевой платформы.
4.3.3 Файлы внутри ZIP-архива можно сохранять в произвольном порядке. ZIP-архив МОЖЕТ включать несколько томов или быть разделен на сегменты определенного пользователем размера. Все значения ДОЛЖНЫ храниться в порядке байтов от младшего к старшему, если для конкретного элемента данных этой документацией не установлено иное.
4.3.7 Local file header:
4.3.12 Структура центрального каталога:
4.3.16 End of central directory record:
Есть и другие детали, относящиеся к шифрованию, более крупным файлам, дополнительным данным, но для целей текущей статьи этого нам будет достаточно. Потребуется лишь уточнить процесс создания SFX-архивов.
Как создать DOS (или другой не-нативный) SFX-архив под Unix?
Суть этой процедуры объяснена на странице мануала UnZipSFX. Сперва понадобится подходящий бинарный дистрибутив UnZip для целевой платформы (DOS, Windows, OS/2 и т.д.). В следующем примере мы предположим, что работаем с DOS. Затем нужно извлечь из дистрибутива модуль UnZipSFX и добавить его, как если бы он был нативным модулем Unix:
Вот и все. При этом вы по-прежнему можете тестировать, обновлять и удалять записи архива. Получился полностью функциональный файл zip.
Ну а теперь с учетом всего этого мы пройдемся по ряду проблем.
Как считывать zip-файл?
В спецификации по этому поводу ничего не сказано.
Есть два очевидных пути:
Файлы внутри ZIP-архива МОЖНО заменять, добавлять и удалять.
Как вам? Это предполагает, что центральный каталог может ссылаться не на все файлы архива, иначе это утверждение о возможности добавления, замены и удаления файлов не имело бы смысла.
Другими словами, если перед нами такая структура:
Тогда очевидно, что B удален, поскольку центральный каталог на него не ссылается. С другой стороны, если [local file B] отсутствует, тогда мы имеем просто независимый zip-архив, т.е. независимый от другого zip-архива, в котором B содержится. Нет необходимости даже упоминать об этой ситуации в спецификации.
Аналогичным образом, если перед нами:
Это может показаться бессмыслицей, но нужно помнить, что PKZIP происходит из эпохи дискет. Операции считывания содержимого всего zip-архива и записи нового zip-архива могут оказаться чрезвычайно медленными. В обоих случаях возможность удаления файла простым обновлением центрального каталога или добавления файла считыванием существующего центрального каталога с присоединением новых данных и последующей записью обновленного центрального каталога окажется весьма желаемой.
Это было особенно актуально в случаях, когда zip-архив занимал несколько дискет. В 1989 году подобная ситуация была не редкостью. Оказывалось гораздо удобнее обновлять README.TXT в zip-архиве без необходимости перезаписывать несколько дискет.
Представители PKWARE в обсуждении сказали следующее:
Файлы внутри ZIP-архива МОЖНО заменять, добавлять и удалять.
Если для центрального каталога допустимо не ссылаться на все локальные файлы, тогда считывание архива путем его прямого сканирования может провалиться. Если дополнительно не постараться, то вы либо получите файлы, которые не должны существовать, либо ошибки из-за попытки перезаписать существующие файлы.
Может ли SFX-компонент содержать какие-либо ID?
Следуя вышеприведенной инструкции по созданию SFX-компонента, мы просто подставляем исполняемый код в начало этого файла, а затем корректируем смещения в центральном каталоге.
Предположим, что у SFX-компонента следующий код:
Вот как можно представить SFX-компонент с находящимся в нем zip-файлом:
Теперь внутри SFX-компонента находится zip-файл. Любой ридер, который считывает с начала, увидит этот внутренний zip-файл и даст сбой. Валиден ли данный zip-файл? Спецификация об этом молчит.
Я проверил. Оригинальный PKUNZIP.exe в DOS, Windows Explorer, MacOS Finder, Info-ZIP (UNZIP, включенный в MacOS и Linux), все четко считывают с конца и видят эти файлы уже после SFX-компонента. А вот Keka и 7z видят zip, вложенный в него.
Считать ли это сбоем или плохим zip-файлом?
APPNOTE.TXT ответа не дает. Я считаю, что здесь должна быть ясность, и что это является одним из незаявленных допущений. PKUNZIP сканирует с конца, поэтому такая схема работает, но как именно она работает, в документации не сказано. Проблема того, что данные в SFX-компоненте могут оказаться похожи на zip-файл, не освещается. Аналогичным образом, потоковое считывание скорее всего провалится, если еще не провалилась из-за недочетов, описанных ранее.
Вы можете решить, что это не такая уж проблема, но в сетевом архиве находятся сотни тысяч SFX zip-ов из 1990-х. Попытка считать такие файлы прямым сканером вполне может провалиться.
Может ли zip-комментарий содержать идентификаторы zip?
APPNOTE.TXT наверняка должен явно сообщать, если это невалидно. Пункт 4.3.1 косвенно указывает:
Но что именно это значит? Значит ли это, что байты 0x50 0x4B 0x05 0x06 не могут появиться в комментарии или коде SFX? Значит ли это, что когда вы в первый раз видите их при обратном сканировании, то второе совпадение уже не ищете?
Если вы сканируете с начала и не сталкиваетесь ни с одной из перечисленных ранее проблем, то прямой сканер успешно это считает. С другой стороны, сам PKUNZIP бы не справился.
Что, если смещение до центрального каталога равно 1,347,093,766?
А что значит продуманная структура?
Этот вопрос определенно требует обсуждения, но, если рассмотреть возможность повторить разработку, то кое-что можно определить без сомнений.
Это исключит двусмысленность при обратном считывании.
2.a. Считать последние 12 байтов.
Тогда, по крайней мере, исчезнет проблема сканирования комментария.
3. Внести ясность в том, какие данные могут появиться в компоненте SFX.
Если вам нужна поддержка прямого считывания, то будет логичным утвердить, что SFX-компонент не может содержать какие-либо записи.
Но обеспечить это сложно, разве что специально написать валидатор. Если вы будете просто проверять, исходя из того, может ли ваше приложение считывать zip-файл, то на сегодня для PKZIP, PKUNZIP, info-ZIP, Windows Explorer и MacOS содержимое SFX-компонента безразлично, поэтому для валидации они не годятся. Нужно явно указать в спецификации на необходимость применения именно обратного сканирования, либо же написать валидатор, который отвергает zip-файлы, не допускающие прямого сканирования, и также в спецификации указать причину.
4. Внести ясность в том, может ли central directory расходиться с записями локальных файлов.
5. Внести ясность в том, могут ли между записями появиться случайные данные.
Обратный сканер не волнует, что находится между записями. Его волнует лишь возможность найти центральный каталог, и считывает он только то, на что центральный каталог указывает. Это означает, что между записями могут быть любые случайные данные (по крайней мере между некоторыми).
Необходима ясность в том, нормально это или нет. Не нужно полагаться на скрытые схемы.
Что же делать? Как все исправить?
End of central directory record должна находиться в конце файла, и последовательность байтов 0x50 0x4B 0x05 0x06 не должна встречаться в комментарии.
Сentral directory руководит содержимым zip-файла, и считать из него можно только те данные, на которые он указывает. Во-первых, причина в том, что содержимое SFX-компонента файла не определено и может содержать zip-записи, которые фактически к zip-файлу не относятся. Во-вторых, возможность добавлять, обновлять или удалять содержимое zip-файла опирается на доступную лишь central directory информацию о том, какие локальные файлы валидны.
Это один способ. Я верю, что в таком случае удалось бы считать сотни миллионов существующих zip-файлов.
С другой стороны, если в PKWARE заявляют, что файлов, имеющих подобные проблемы, не существует, тогда также сработает следующий вариант:
End of central directory record должна находиться в конце файла, и последовательность байтов 0x50 0x4B 0x05 0x06 не должна встречаться в комментарии.
SFX-архив не должен содержать любую из последовательностей id записей, перечисленных в этом документе, так как они могут быть неверно поняты zip-сканерами прямого чтения. Любой файл, не следующий этому правилу, является недействительным zip-архивом.
Надеюсь, что файл APPNOTE.TXT все же обновят, чтобы различные zip-ридеры и zip-генераторы трактовали валидность файлов одинаково.
К сожалению, все говорит в пользу того, что PKWARE не хотят вносить в этом вопросе ясность. Их позиция состоит в том, что zip является неоднозначным форматом. Если вы хотите пользоваться прямым сканированием, то просто не делайте этого для файлов, которые его не поддерживают. Они по-прежнему остаются валидными zip-файлами, и то, что их нельзя таким образом считать, значения не имеет. Вы сами выбираете отказ от их поддержки.
Думаю, эту точку зрения можно понять. Ведь лишь несколько библиотек поддерживают все возможности zip, а может и ни одна. Тем не менее, было бы здорово знать, намеренно ли вы не обрабатываете какой-то файл, или же просто неверно его считываете, и по воле случая иногда получается.
Желание все это осветить возникло у меня в процессе написания JS-библиотеки для распаковки. Их уже существует очень много, но меня интересовали особые возможности, которых в найденных мной вариантах не было. В частности, мне нужно было, чтобы библиотека позволяла считывать из большого архива один файл максимально быстро. Это означало использование обратного сканирования, поиск смещения до нужного файла и его разархивирование. Надеюсь, что и другим моя библиотека пригодится.
Вам может быть весьма интересна эта история ZIP (англ.):