архиватор с открытым исходным кодом
Архиваторы с открытым исходным кодом для Windows
Архиватор присутствует на любом компьютере, даже если он там вообще не нужен. Все обязательно его устанавливают не обращая внимания на тот факт, использовали ли его хотя бы один раз за год. В организациях тоже ставят программы для работы с архивами на каждый компьютер, а ведь WinRAR стоит 29 долларов за одну лицензию.
Представьте сколько нужно потратить денег, чтобы купить лицензии хотя бы для пары десятков компьютеров. Ставить так называемые пиратские версии WinRAR не стоит того, так как нарушение авторских прав регулируется 146 статьей УК РФ, по которой может светить до шести лет лишения свободы и до 600 000 рублей штрафа без учета компенсации автору.
PeaZip
Свободная программа для открытия rar и zip архивов PeaZip является очень достойной заменой WinRAR, и по внешнему виду, на мой личный взгляд, более приятной заменой, прочитать подробнее и скачать можно тут. Также стоит отметить, что он полностью на русском языке, и очень часто обновляется, а еще имеются версии для 64-разрядных операционных систем.
7-Zip безусловно не требуется представления, так как даже зачастую даже самые простые пользователи его знают. Минус в том, что часто на компьютере стоит и WinRAR, и 7-zip. Он и удобен, и функционален, и полностью на русском, и версии есть 64-битные. По поводу внешнего вида вопрос спорный, он скорее простенький, но с другой стороны кому-то это будет наоборот удобно. Подробнее про архиватор 7-zip можно тут.
FreeArc
А вот это уже практически неизвестный архиватор, который поддерживается видимо больше не будет, но скорость архивации и распаковки значительно выше, чем у 7-zip и WinRAR, но не только скорость, еще и уровень сжатия значительно выше. Очень не хватает функции Drag&Drop, то есть перетащи и отпусти, но скорость работы и уровень сжатия это компенсируют. Он также, как и предыдущие полностью на русском языке. Посмотреть его описание и найти ссылки на скачивание можно тут.
Прочие свободные архиваторы
Следующие уже не такие мощные и функциональные, чтобы выделять их, либо они не являются полноценными программными продуктами, либо устарел и больше не поддерживается.
KGB Archiver
Он имеет довольно неплохую степень сжатия, но для этого требует слишком большое количество времени. То, что 7-zip сжал за 15 минут, KGB Archiver сжимал несколько часов. Не имеет перевода на русский язык, а также не имеет интеграции с контекстным меню проводника Windows, в отличии от трех предыдущих. Посмотреть его можно тут.
ArcThemALL!
В целом рабочий архиватор, но крайне не удобен и не функционален, хоть и имеет интеграцию с контекстным меню проводника. Переведен на русский язык. Прочитать про него можно тут.
Это не самостоятельный архиватор, это просто интерфейс к архиватору 7-zip, но назвать его удобнее оригинала очень трудно. Очень ухудшает мнение о нем отсутствие перевода на русский язык. Посмотреть его можно тут.
Данный экземпляр очень трудно назвать архиватором, так как он поддерживает только формат zip. И мягко говоря, имеет весьма скудный функционал. Перевода на русский язык нет. Скачать и посмотреть его можно тут.
Flakarchiver
Тут уже разговор такой, что предыдущий архиватор в сравнении с этим, больше архиватор, чем этот. Этот только открывает архивы. Посмотреть его можно тут.
Также архиваторы с открытым кодом для Windows можно посмотреть тут или здесь.
Архиваторы
Свободные архиваторы для Windows.
Мощный и быстрый архиватор с открытым исходным кодом, который сжимает мощнее всех, и распаковывает быстрее всех, кроме WinRar.
Бесплатный архиватор для Windows 7. Чтение и запись любых архивов. Скачать бесплатно архиватор.
Программа для открытия rar архивов. Русский интерфейс. Удобный бесплатный архиватор.
Архиватор с открытым исходным кодом для Windows, который поддерживает ассоциацию файлов и интеграцию с контекстным меню. Переведен на русский язык.
Альтернативный пользовательский интерфейс для известного архиватор 7-Zip, который ориентирован на скорость и простоту использования.
Свободный zip архиватор, который позволяет открывать архивы форматов bz2, zip, gz, rar, tgz, arj, lha, 7z, iso, jar, lzh, z, …
Менеджер Zip архивов с портативным пользовательским интерфейсом и уникальным поиском содержимого, а также функцией обновления архива.
5 файловых архиваторов с открытым исходным кодом для экономии места на диске
5 файловых архиваторов с открытым исходным кодом для экономии места на диске
Архиваторы файлов — это программные пакеты, которые позволяют распаковывать или извлекать сжатые форматы файлов. Например, вы можете встретить форматы архивов ZIP или RAR, которые широко используются разработчиками для упаковки своего программного обеспечения. Если программное обеспечение упаковано в ZIP или RAR, вы можете извлечь эти форматы с помощью файловых архиваторов. Вы также можете установить свои собственные форматы сжатых файлов с помощью этих утилит, чтобы сэкономить место на диске.
Программное обеспечение имеет степень сжатия 2-10% для форматов GZIP и ZIP. Еще одним преимуществом этой утилиты является то, что она интегрируется с File Explorer, так что вы можете выбрать опции 7-Zip из контекстного меню папки. Кроме того, он также обеспечивает шифрование AES-256, так что вы можете добавлять пароли в форматы архивов ZIP и 7z.
Easy 7-Zip
PeaZip
PeaZip имеет немного более привлекательный дизайн пользовательского интерфейса, чем 7-Zip, а также добавляет несколько удобных дополнительных опций и ярлыков в контекстное меню Проводника. PeaZip также предоставляет опции шифрования для своих пользователей, так что вы можете кодировать архивы с менеджером паролей. Еще одна полезная особенность этой утилиты в том, что вы можете восстанавливать поврежденные архивы с ее помощью.
B1 Бесплатный архиватор
B1 Free Archiver — это многоплатформенная утилита сжатия для Windows, Android, Mac и Linux, которая получила блестящие обзоры. Нажмите кнопку « Бесплатная загрузка для Windows» на домашней странице программного обеспечения, чтобы установить его. Однако вы также можете извлечь сжатые файлы с помощью B1 Online Archiver, который поддерживает различные форматы.
B1 Free Archiver позволяет открывать все основные форматы архивов, такие как ZIP, 7z, GZIP, TAR, ISO, RAR, CAB и собственный архив B1. Однако создание архива ограничено только форматами B1 и ZIP. Это дает вам различные режимы сжатия, и пользователи также могут разделять и шифровать архивы.
B1 Free Archiver также имеет плавный и интуитивно понятный графический интерфейс, который поднимает его над некоторыми другими утилитами сжатия. Это пользовательский интерфейс, который позволяет вам перетаскивать и включает поддержку горячих клавиш. Панель инструментов программного обеспечения включает все основные параметры, а B1 также включает в себя файловый браузер с деревом папок, которое улучшает навигацию.
FreeArc
FreeArc — это файловый архиватор с открытым исходным кодом, который предлагает более быстрое сжатие, чем известные альтернативы, такие как 7-Zip. Нажмите « Загрузить» (7,9 МБ) на веб-сайте утилиты, чтобы сохранить установщик FreeArc для Windows. Программа предлагает поддержку сжатия для основных форматов архивов, таких как ZIP, RAR и 7z, а также ARC.
FreeArc отличается большей скоростью и эффективностью для извлечения и сжатия файлов, чем альтернативные утилиты. Он имеет одиннадцать алгоритмов сжатия и фильтров, которые дают ему преимущество над 7-Zip и WinRAR. На веб-сайте утилиты утверждается, что она «работает в 2–5 раз быстрее», чем другие программы для архивирования файлов для различных классов сжатия.
Это пять великолепных файловых архиваторов с открытым исходным кодом для Windows 10 и других платформ. С помощью утилит вы можете извлекать или сжимать файлы с различными форматами архивов, исправлять архивы и шифровать сжатые файлы. Они также предлагают потрясающую ценность по сравнению с WinRAR и WinZIP.
Примечание редактора: этот пост был первоначально опубликован в октябре 2016 года и с тех пор обновлен для свежести и точности.
Проверяем исходный код 7-Zip с помощью PVS-Studio
Одной из программ, которая позволяет решить задачу сжатия данных, является популярный файловый архиватор 7-Zip, я и сам частенько его использую. Читатели давно обращались к нам с просьбой проверить код данного приложения. Что ж, пришло время заглянуть в его исходники и посмотреть, что интересного сможет найти PVS-Studio.
Введение
Пара слов о проекте. 7-Zip — свободный файловый архиватор с высокой степенью сжатия данных, написанный на языках C и C++. Он имеет небольшой размер в 235 тысяч строк кода. Поддерживает несколько алгоритмов сжатия и множество форматов данных, включая собственный формат 7z с высокоэффективным алгоритмом сжатия LZMA. Программа разрабатывается с 1999 года, она бесплатна и имеет открытый исходный код. 7-Zip является победителем SourceForge.net Community Choice Awards 2007 года в категориях «Лучший проект» и «Лучший технический дизайн». Для проверки была выбрана версия 16.00, исходный код которой был скачен по ссылке http://www.7-zip.org/download.html
Результаты проверки
Для проверки кода 7-Zip использовался статический анализатор кода PVS-Studio v6.04. Для статьи были выбраны и проанализированы наиболее интересные сообщения анализатора. Давайте на них посмотрим.
Опечатки в условных операторах
Опечатки в условных операторах встречаются в программах достаточно часто. В случае с большим количеством проверок их обнаружение может доставить немало хлопот. В таких случаях на помощь приходит статический анализатор кода.
Приведу несколько примеров данной ошибки.
V501 There are identical sub-expressions ‘Id == k_PPC’ to the left and to the right of the ‘||’ operator. 7zupdate.cpp 41
Анализатор обнаружил одинаковые условные выражения. В лучшем случае одно из условий Id == k_PPC является лишним и не влияет на логику работы программы. Для исправления опечатки необходимо просто убрать это условие, тогда правильное выражение будет иметь следующий вид:
Но возможны и более серьезные последствия такой опечатки, если вместо константы k_PPC, в одном из повторяющихся условий, должна стоять другая константа. В этом случае логика работы программы может быть нарушена.
Вот еще один пример опечатки в условном операторе:
V501 There are identical sub-expressions to the left and to the right of the ‘||’ operator: offs >= nodeSize || offs >= nodeSize hfshandler.cpp 915
Здесь проблема в повторяющемся условии offs >= nodeSize.
Скорее всего, приведенные опечатки получились при использовании Copy-Paste для дублирования кода. Нет смысла призывать отказаться от копирования участков кода. Это слишком удобно и полезно, чтобы лишать себя такой функциональности в редакторе. Необходимо просто более внимательно проверять полученный результат.
Идентичные сравнения
Анализатор обнаружил потенциально возможную ошибку в конструкции, состоящей из условных операторов. Вот ее пример:
V517 The use of ‘if (A) <. >else if (A) <. >‘ pattern was detected. There is a probability of logical error presence. Check lines: 388, 390. archivecommandline.cpp 388
В коде NRecursedType определяется следующим образом:
Получается, что второе условие никогда не выполнится. Попробуем разобраться в этой проблеме подробнее. Исходя из описания параметров командной строки, параметр -r говорит об использовании рекурсии для подкаталогов. В случае параметра -r0 рекурсия используется только для шаблонных имен. Сопоставив это с определением NRecursedType можно сделать вывод, что во втором случае должен использоваться тип NRecursedType::kWildcardOnlyRecursed. Тогда правильный код будет выглядеть следующим образом:
Условия, которые всегда истины или ложны
Необходимо внимательно следить, работаете вы со знаковым или беззнаковым типом. Игнорирование этих особенностей может привести к неприятным последствиям.
Дважды проверяется одно и тоже условие
Анализатор обнаружил потенциально возможную ошибку, связанную с тем, что дважды проверяется одно и тоже условие.
Так выглядит фрагмент кода программы:
Скорее всего, в данной ситуации вторая проверка просто избыточна, но возможна и ситуация, в которой программист после копирования не изменил второе условие, и оно оказалось ошибочным.
Подозрительная работа с указателями
Встречается в коде 7-Zip и ошибка, когда указатель в начале разыменовывается, а только потом проверяется на равенство нулю.
V595 The ‘outStreamSpec’ pointer was utilized before it was verified against nullptr. Check lines: 753, 755. lzmaalone.cpp 753.
Это очень распространенная ошибка во всех программах. Возникает она обычно из-за невнимательности в процессе рефакторинга кода. Обращение по нулевому указателю приведет к неопределенному поведению программы. Рассмотрим фрагмент кода приложения, содержащий ошибку данного типа:
Исключение внутри деструктора
Если в программе возникает исключение, начинается свертывание стека, в ходе которого объекты разрушаются путем вызова деструкторов. Если деструктор объекта, разрушаемого при свертывании стека, бросает еще одно исключение и это исключение покидает деструктор, библиотека C++ немедленно завершает программу, вызывая функцию terminate(). Из этого следует, что деструкторы никогда не должны распространять исключения. Исключение, брошенное внутри деструктора, должно быть обработано внутри того же деструктора.
Анализатор выдал следующее сообщение:
V509 The ‘throw’ operator inside the destructor should be placed within the try..catch block. Raising exception inside the destructor is illegal. consoleclose.cpp 62
А вот, как выглядит деструктор генерирующий исключение:
Сообщение V509 предупреждает, что если объект CCtrlHandlerSetter разрушается в процессе обработки исключения, то новое исключение приведет к немедленному аварийному завершению программы. Данный код следует переписать таким образом, чтобы сообщить об ошибке, возникшей в деструкторе, без использования механизма исключений. Если ошибка не критична, то ее можно игнорировать.
Инкремент переменной типа bool
Исторически сложилось, что для переменных имеющих тип bool допустима операция инкремента, она устанавливает значение переменной в true. Эта особенность связанна с тем, что раньше для представления булевых переменных использовались целочисленные значения. Впоследствии эта возможность осталась для поддержки обратной совместимости программ. Начиная со стандарта C++98 она помечена как deprecated и не рекомендуется к использованию. В готовящемся стандарте С++17 возможность использования инкремента для булевой переменной помечена для удаления.
В данной ситуации возможно два варианта. Или переменная numMethods является флагом и в этом случае лучше использовать инициализацию булевым значением numMethods = true. Или, судя по названию переменной, это счетчик, который должен быть целочисленным.
Проверка неудачного выделения памяти
Анализатор обнаружил ситуацию, когда значение указателя, возвращаемого оператором new сравнивается с нулем. Как правило, это значит, что программа при невозможности выделить память будет вести себя не так, как ожидает программист.
V668 There is no sense in testing the ‘plugin’ pointer against null, as the memory was allocated using the ‘new’ operator. The exception will be generated in the case of memory allocation error. far.cpp 399
Вот как это выглядит в коде программы:
Конструкции требующие оптимизации
Теперь немного о местах, которые потенциально можно оптимизировать. В функцию передается объект. Этот объект передается по значению, но при этом не модифицируется, так как имеется ключевое слово const. Возможно, было бы рационально передавать его с помощью константной ссылки в языке C++ или с помощью указателя в языке C.
Вот пример для вектора:
V801 Decreased performance. It is better to redefine the first function argument as a reference. Consider replacing ‘const… pathParts’ with ‘const… &pathParts’. wildcard.cpp 487
При вызове этой функции произойдет вызов конструктора копирования для класса UStringVector. Если подобное копирование объектов происходит часто, то это может существенно снижать производительность приложения. Данный код можно легко оптимизировать, добавив ссылку:
Заключение
7-Zip — это небольшой проект, развивающийся уже достаточно давно и найти большого количества серьезных ошибок конечно не удалось. Но в коде все же есть места, на которые нужно обратить внимание и статический анализатор кода PVS-Studio существенно облегчит эту работу. Если вы разрабатываете проект на C, C++ или C#, предлагаю не откладывая скачать PVS-Studio и проверить свой проект: http://www.viva64.com/ru/pvs-studio-download/
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Kirill Yudintsev. Checking 7-Zip with PVS-Studio analyzer.
АРХИВАТОРЫ
WinRAR — это самый популярный архиватор в мире. Этот архиватор заслуженно занимает лидирующие позиции в рейтингах.
7-Zip — популярный архиватор. В первую очередь, этот архиватор привлекателен своим собственным мощным форматом 7z.
PowerArchiver — это мощный архиватор с продвинутым интерфейсом и широким ассортиментом дополнительных функций. Скачать архиватор.
PeaZip — удобный, простой в освоении и достаточно мощный архиватор. Это полностью бесплатная программа с открытыми кодам. Скачать.
WinZip — это программа, получившая всемирную популярность, из-за того, что явилась первым архиватором с графическим интерфейсом.
Bandizip — простой архиватор с поддержкой ряда популярных форматов. Эта программа включает несколько базовых функций.
ZipGenius — это полностью бесплатный архиватор. Важно заметить, что программа абсолютна бесплатна не только для домашнего использования.
Достаточно мощный и полностью бесплатный архиватор. Программа поддерживает работу со всеми популярными форматами архивов.
ExtractNow — это небольшая утилита для распаковки архивов. ExtractNow служит для распаковки нескольких архивов нажатием всего одной кнопки.