На чем написан 7zip
С детства пользовался программой winrar. Упаковывал и распаковывал тысячи архивов. На данный момент почти все данные в бэкапах лежат в .rar. Все хорошо работает, но некоторые моменты не совсем устраивают.
Да, да, хочется наконец-то купить нужное ПО, тем более, если оно верой и правдой работает ни один десяток лет. Как я понял, сейчас можно купить обычную версию за $29.00.
Относительно недавно винда научилась понимать zip (или я поздно об этом узнал) и позволила бесшовно открывать zip-архивы прямо в проводнике. Мне, как пользователю проводника, это очень нравится. Было бы неплохо так же работать с другими форматами архивов.
Производительность
WinRar - быстрый архиватор. Но с увеличением количества ядер стало заметно что при архивации или даже разархивации задействуются 2-3, максимум 4 ядра. Когда имеется 8 ядер/16 потоков, хочется чтобы задействованы были все.
Совместимость
Внезапно при открытии старого архива обнаружил некоторую несовместимость между 4 и 5 версиями. Как бы не вышло что в нужный момент бекап есть, а архивы не открываются.
Стоит ли переходить на 7-zip? Бесплатный, примерно такой же быстрый и вроде как без проблем совместимости.
Если давно пользуетесь, расскажите о подводных камнях с которыми столкнулись, будет полезно узнать. Так же интересно было бы узнать об альтернативах.
Я и опробовал. Особой разницы не заметил. Не понятно что выбрать в итоге.
Выбирай бесплатное, хотя бы карму почистишь себе если другой разницы не видишь.
Я готов купить, хочу именно найти конечный вариант. По тестам в интернете они идут рядом по производительности, но вроде winrar чаще оказывается быстрее. Еще у 7zip вроде нет удаления после разархивирования.
Короче, пытаюсь найти фатальный недостаток который повернет выбор к другому архиватору.
Да, стоит, 7-zip хорош
Когда-то рар служил файлменеджером для загрузочной дискеты, это была киллер фича. Сейчас, в плане удобства, абсолютно всё равно, что вызывать по ПКМ.
Я бы уточнил вопрос так: с какого рода файлами и при каких настройках 7z жмёт заметно лучше. Если такой кейс близок к повседневному режиму, то переход обоснован.
Блин, шёл 2019 год, а люди до сих пор пользуются винраром. НО ЗАЧЕМ?
7-зип бесплатный и выполняет 100% задач для юзера, который не может отличить один архиватор от другого. Переходи на 7-зип и не парься даже)
Зачем вообще WinRAR для обычно пользователя?
Я лично всех отучаю пользоваться .rar архивами, потому что в них просто нет надобности.
Ибо уже любая тулза умеет открывать .zip.
Привычка, особенно в СНГ. Раньше по сути не было альтернатив.
Для обычного пользователя не было и нет разницы, а если надо сжимать несколько терабайт данных то все особенности работы архиватора начинают иметь значение: сжать на 100% за день или сжать на 80% за пол, разархивировать 20-гиговый архив за 5 минут или 30-гиговый за 1. Условно.
Тоже удивился когда прочитал что держит архивы в рар-ах
Не знаю как 7zip сейчас, но WinRAR был и остается удобен тем, что можно запустить что-то из архива. Он распаковывает все содержимое (а не конкретный файл) в темповый каталог и не надо руками распаковывать. Мне удобно это, так как часто в архивы запакованы установщики драйверов, например. Виндовый проводник с zip так не умеет. Не то чтобы экономит много времени, но удобнее, чем распаковать, установить, удалить.
Так и 7zip может открывать из архива
Архиватор 7-Zip отлично справляется со своей задачей — эффективно сжимать данные. Его можно назвать «швейцарским ножом» в мире архиваторов. Он поддерживает разные алгоритмы сжатия и большое количество форматов данных, таких как ZIP, gzip, tar и RAR. Отдельный плюс — в том, что архиватор свободный.
Первая версия 7-Zip увидела свет 18 июля 1999 года, за относительно короткое время архиватор смог стать очень популярным. Относительный недостаток 7-Zip — наличие лишь версии для Windows (официальный клиент). Но сейчас, спустя всего 22 года, появился и вариант для Linux, официальный билд от разработчиков.
Выпущен релиз под Linux на этой неделе. Версия 21.01 доступна как для Linux, так и для Windows. На сайте разработчика есть варианты для разных систем, включая 32-bit, 64-bit, x86 и ARM.
Linux-версия получила не меньше функций и возможностей, чем Windows-релиз. Единственное: пока — с 7-Zip можно работать лишь в командной строке, графического интерфейса нет. Возможно, его выпустят еще через пару десятков лет, кто знает.
Конечно, кроме официальной версии, есть и неофициальные билды под Linux. Наиболее известен p7zip, он в ходу уже несколько лет. Разработчик архиватора знает о нем, и в релизе говорится, что «официальный билд похож на p7zip, но не идентичен ему». Кстати, Игорь Павлов выпустил официальную консольную версию 7-zip для Linux вместе с выпуском версии 21.01 для Windows в связи с тем, что проект p7zip не получал обновлений уже пять лет. Возможно, если бы не этот факт, официального билда архиватора не было бы до сих пор.
Что касается новой версии 7-zip для Windows, то, как всегда, разработчик добавил ряд улучшений и исправлений. Поправлены баги, улучшена поддержка ARM64.
Эта статья с одинаковым успехом может быть отнесена к блогам ".NET", «Open source» и «Я пиарюсь». После того. как я написал материал, стало ясно, что больше всего в ней «Open source»… Просьба сильно не бить, если я ошибся.
Использование SevenZipSharp
В библиотеке два главных класса — SevenZipExtractor и SevenZipCompressor. Шаблон использования первого:
// Синхронная распаковка
using ( var extr = new SevenZipExtractor( @"путь\к\архиву" ))
extr.Extracting += DoExtractingEvent();
extr.ExtractArchive( @"куда\распаковывать" );
DoFinishEvent();
>
// Асинхронная распаковка
var extr = new SevenZipExtractor( @"путь\к\архиву" );
extr.Extracting += DoExtractingEvent();
extr.ExtractionFinished += (s, e) => < DoFinishEvent(); extr.Dispose(); extr = null ; >;
extr.BeginExtractArchive( @"куда\распаковывать" );
* This source code was highlighted with Source Code Highlighter .
// Синхронная упаковка
var cmpr = new SevenZipCompressor();
cmpr.CompressDirectory( @"путь\к\пакуемой\папке" , @"имя\архива" );
DoFinishEvent();
cmpr = null ;
// Асинхронная упаковка
var cmpr = new SevenZipCompressor();
cmpr.CompressionFinished += (s, e) => < DoFinishEvent(); cmpr = null ; >
cmpr.BeginCompressDirectory( @"путь\к\пакуемой\папке" , @"имя\архива" );
* This source code was highlighted with Source Code Highlighter .
- Полная поддержка многопоточности
- Оборачиваются все форматы архивов, поддерживаемые 7-Zip-ом
- Неприхотливость к оборачиваемой библиотеке — никаких жестких привязок
- Поддержка многотомных архивов при распаковке и упаковке
- Распаковка большинства SFX архивов
- Весь код тщательно снабжен комментариями
Как все началось
Рассматривался вариант с компиляцией 7-Zip в смешанную сборку (mixed assembly) с флагом /clr. Этот вариант был отвергнут, т.к. во-первых, интерфейс получился бы низкоуровневый и не пригодный для быстрого использования и все равно пришлось писать «добавку», а во-вторых, чтобы собрать код с флагом /clr:pure, требовалось бы переписывать много кода, и unmanaged части все равно остались.
Когда SevenZipSharp только появился, мне хотелось рассказать о нем потенциально заинтересованным пользователям-разработчикам. Я оставлял краткое описание библиотеки везде, где было можно: в ответах на вопросы StackOverflow, на программистских форумах (в т.ч. MSDN, Channel 9), в комментариях к той самой статье на CodeProject и даже на английской Wikipedia. Это все принесло результаты, и вскоре поисковые выдачи Google вышли по траффику на первое место. Думаю, рекламировать свои проекты должны все, иначе большинство попросту не узнает об их существовании. Эффективность рекламы оценивается по статистике загрузок и посещений, которая публично доступна.
SevenZipSharp и 7-Zip
Вот как SevenZipSharp оборачивает 7-Zip. Через COM-овский CreateObject создается объект, поддерживающий указанный интерфейс (IInArchive, IOutArchive). Из этого объекта дергаются нужные функции, и достигается желаемый результат (например, IInArchive.Extract(. )). Во время длительных операций из unmanaged кода вызываются managed callback-и, и это приводит к проблеме, которую я не сразу осознал — обработка ошибок. Например, из-за ошибки в callback-е или исключении в вызываемом callback-ом пользовательском событии исполнение операции падает без предупреждений и какой-либо вразумительной информации, кроме странного 32-битного кода ошибки. Я решил обернуть все callback-и try/catch-ами и заносить все возникшие исключения в стек ошибок, который в случае неудачи показывается пользователю. Если есть более изящное решение, прошу о нем рассказать.
В один прекрасный момент мне захотелось заставить работать SevenZipSharp под Mono (GNU/Linux). И тогда проблема привязанности 7-Zip к COM проявила себя во всем великолепии. Необходимо было заново написать низкоуровневую часть библиотеки почти с нуля. Т.к. код 7-Zip, как я уже писал, специфичный, инструменты для автоматической обертки вроде SWIG оказались бесполезными, а чтобы они вообще заработали, мне пришлось сначала пройтись по всему коду препроцессором и убрать 10-ти этажные define-ы. В настоящее время я потихоньку пишу независимую от COM обертку.
Разработка
* This source code was highlighted with Source Code Highlighter .
Отмечу, что разрабатывался SevenZipSharp стихийно. Если что-то хотелось добавить к функциональности, я брал и добавлял — и не советовался с начальниками, не согласовывал решения с руководством и т.д. В этом есть свои минусы, но зато баги исправлялись мгновенно и просьбы о новых функциях удовлетворялись в течение нескольких дней. Полная свобода действий — и настоящая учеба на своих ошибках.
Бонусы
Воодушевляет, когда в письмах благодарят за библиотеку, сообщают, что используют ее в реальных и весьма известных проектах (например, Stardock). Иногда мне приходят письма от людей, с предложениями начать работать над библиотекой вместе. Человек обычно полон энтузиазма, уверяет, что вместе будет здорово и т.п. После ответного в письма, в котором я пишу, что сразу никому пароль от SVN не дам, спрашиваю, а что человек вообще умеет, и описываю примерные планы развития проекта на будущее, никто со мной пока не связывался. Мне это кажется странным, возможно, психологию таких людей мне объяснят в комментариях.
Типичное письмо без продолжения
Поскольку речь зашла о людях, расскажу о публике на CodePlex. Несколько раз мне жертвовали код, причем всего один раз — по правилам, через патч. Порой давали дельные советы, подсказывали, что можно сделать лучше. Очень приятно, когда ошибки исправляешь не ты, а другие пользователи, и делятся потом багфиксом. Однако часто о баге заявляют не в Issue Tracker, а в обсуждения (Discussions), даже если баг очевидный. Приходится регулярно вчитываться в вопросы и решать, чей это косяк, библиотеки или криворукого пользователя. Впрочем, иногда появлялись «участники», заводящие сразу с десяток багов, из которых в лучшем случае пара действительно стоящие, а остальные являются просьбами добавить лишнюю функциональность, которая кроме самих «участников» никому не нужна. Бывает, что завел человек баг вроде «не работает распаковка», спрашиваешь у него в комментариях, какая версия библиотеки, как воспроизвести ошибку, а тот уже давно забыл про SevenZipSharp и не отвечает. Совсем.
Отдельно веселят люди, оставляющие оценки (звездочки на CodePlex, от 1 до 5). Бесит, когда ставят 2 и не объясняют почему. Впрочем, также бесит когда ставят 2 и пишут, что мол вообще ничего не работает и библиотека ваша говно. К счастью, с SevenZipSharp это происходит редко, в отличие от других популярных проектов, которые, я уверен, не заслуживают таких оценок.
Итоги
Оглядываясь назад, я вижу, что связался с SevenZipSharp не зря. Получены и бесценный опыт, и некоторые выгоды. Если вы спросите, а стоит ли разрабатывать свой open source проект «для души», я без раздумий отвечу — конечно!
← →Cyrax © ( 2007-09-17 19:00 ) [0]
На wxWidgets ? Qt ?
← →Вася Правильный ( 2007-09-17 19:06 ) [1]
спрасить у автора?
← →palva © ( 2007-09-17 19:54 ) [2]
Это ведь приложение только для Windows.
Проще всего его написать на чистом Windows API
Cyrax © ( 2007-09-17 19:58 ) [3]
В бинарниках никто не ковырялся ?
← →ANTPro © ( 2007-09-17 20:08 ) [4]
> [3] Cyrax © (17.09.07 19:58)
Есть же исходники.
Сергей М. © ( 2007-09-17 20:16 ) [5]
> palva © (17.09.07 19:54) [2]
> Это ведь приложение только для Windows
> А ОН-то тут причем ?
Не знаю кто ОН. И не знаю причем. Скорее всего я не смог приспособиться к вашей манере общения и не понял ваш [5]. Извините.
Сергей М. © ( 2007-09-17 20:59 ) [11]
> Не знаю кто ОН
Он самый, тобой упомянутый в [7] т.н. "Оконный менеджер" ..
← →palva © ( 2007-09-17 21:08 ) [12]
Мне не хочется с вами общаться в таком тоне. Выясняйте этот вопрос в гугле и хэлпах.
← →DrPass © ( 2007-09-17 21:15 ) [13]
> 7-Zip: чем написан ?
Повторяю для непонятливых: 7-zip написан на компьютере!
ANTPro © ( 2007-09-17 21:18 ) [14]
> [7] palva © (17.09.07 20:42)
Я в исходники не заглядывал :)
Но, почему под Linux не может использоваться Qt(или wxWidgets), а под Windows - Windows API?
tesseract © ( 2007-09-17 21:19 ) [15]
> Но, почему под Linux не может использоваться Qt(или wxWidgets),
> а под Windows - Windows API?
А эта фигня тут причём ? ни so ни dll ни одного не второго не требуют.
← →Сергей М. © ( 2007-09-17 21:21 ) [16]
> palva © (17.09.07 21:08) [12]
По поводу оболочек 7z-реализаций - туева хуча ссылок и в гуглях и в хэлпах)
А вот по поводу самих реализаций - эт уж тебе, пожалуй, гуглить-хелпить впору)
← →PEAKTOP © ( 2007-09-17 21:29 ) [17]
> 7-Zip: чем написан ?
> Cyrax © (17.09.07 19:00)
> На wxWidgets ? Qt ?
> Оконный менеджер — это программа, которая грубо говоря дорисовывает рамки окошкам.
До меня теперь дошло, в чем непонимание. Таким дурацким названием я хотел подчеркнуть, что файловый менеджер выполнен в виде оконного приложения. А вообще в 7Zip он называется File Manager.
Сергей М. © ( 2007-09-17 22:15 ) [32]
> то ли этой ветке в орешнике место.
Судя по [28] - там ему и место
← →Zeqfreed © ( 2007-09-17 22:24 ) [33]
> Сергей М. © (17.09.07 22:15) [32]
Судя по [32] — осень в Австралии намечается дождливая.
palva © ( 2007-09-17 22:27 ) [34]
Сергей М. © (17.09.07 22:15) [32]
> Судя по [28] - там ему и место
Это не надо. После [28] у меня в голове щелкнуло. А вот после ваших вопросов не щелкает.
Сергей М. © ( 2007-09-17 22:27 ) [35]
> Zeqfreed © (17.09.07 22:24) [33]
Судя по [33] — в небесной канцелярии ожидается смена руководства
← →Сергей М. © ( 2007-09-17 22:29 ) [36]
> у меня в голове щелкнуло
Видать, трава была хороша)
← →Dimaxx © ( 2007-09-18 00:24 ) [37]
Раз уж заговорили о 7z спрошу - никто не натыкался на паскалевский порт сырцов LZMA? Я нарыл, но он нерабочий. Либы юзать не хотелось бы.
В активной разработке
Достоинства и недостатки
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 22 августа 2012.
Cжатие
Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена.
Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники.
Эта отметка установлена 28 июня 2010.
7-Zip использует многопоточность и позволяет задействовать для сжатия, в зависимости от алгоритма или формата, различное количество потоков. При создании архивов, в которых файлы могут сжиматься независимо друг от друга (например, ZIP), программа может использовать до 8 потоков одновременно. Для алгоритма сжатия LZMA архиватор одновременно может использовать до 2 потоков. Невозможность использования большего их количества объясняется последовательным характером непрерывного сжатия. Алгоритм сжатия LZMA2 не имеет этого недостатка.
При сжатии в формате 7z используются также специальные фильтры-нормализаторы. Так, для более оптимального сжатия 32-битного x86 кода используются нормализующие конверторы BCJ и BCJ2. Программа также имеет оптимизирующий дельта-конвертер для некоторых типов мультимедиаданных, например несжатых 24-битных изображений.
Результаты по степени сжатия сильно зависят от сжимаемых данных. Обычно 7-Zip сжимает в формат 7z на 4—25 % лучше, чем в формат zip [8] .
7-Zip 4.65 занимает 24 место в рейтинге архиваторов по степени сжатия, для сравнения популярные WinRAR 3.80 и WinZip 12 занимают 32 и 34 место соответственно. Лидеры же рейтинга PAQ более известные в своей GUI-модификации KGB и WinRK имеют на порядок большее время сжатия.
Содержание
Основные характеристики 7-Zip
- Поддерживаемые алгоритмы: LZMA, LZMA2, PPMd, Bzip2, Deflate и Deflate64
- Поддерживаемые форматы:
- упаковка и распаковка: 7z, BZIP2 (BZ2, TB2, TBZ, TBZ2), GZIP (GZ, TGZ), TAR, ZIP (JAR), XZ, WIM;
- только распаковка: ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, MBR, ISO, LZH (LHA), LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, XAR, Z (TAZ).
Читайте также: