Как распаковать/разархивировать файлы, сжатые/заархивированные с использованием различных методов - zip, rar, gzip, tar

Требование к системе, которую я пишу, означает, что мне нужно определить содержимое файлов/пакетов, которые могли быть созданы с использованием любого из множества различных методов сжатия/архивирования - zip, gzip, rar, tar. Файлы будут расположены на удаленных системах, на которых может работать любой вариант Windows или Unix/Linux, и файлы могут быть созданы с использованием любого метода сжатия/архивирования (я соглашусь с управляемым списком для поддержки).

Какие форматы обрабатывает System.IO.Packaging — только zip?

Сторонняя библиотека? Это не мой предпочтительный вариант - мне нужно поддерживать эту систему в будущем.

Любые рекомендации и предложения будут очень признательны.


person JeffR    schedule 04.03.2014    source источник
comment
Боковое примечание: я думаю, что вы получаете связь между внешними библиотеками и должны поддерживать в будущем полностью обратную... Больше кода, который вы пишете сами, больше кода, который вам нужно поддерживать...   -  person Alexei Levenkov    schedule 04.03.2014
comment
Ну да, но я больше имел в виду бесплатное ПО, а не коммерческие библиотеки. Коммерческие библиотеки, на которые я бы посмотрел. Я должен поддерживать систему, которую я поставляю, а это означает любые библиотеки, которые я поставляю вместе с ней. Так что, даже если это коммерческие библиотеки, мой клиент придет за мной, когда они потерпят неудачу.   -  person JeffR    schedule 04.03.2014


Ответы (1)


System.IO.Packaging имеет ZipPackage реализация, поддерживающая zip-файлы. Любые другие форматы сжатия изначально не поддерживаются, и вам придется искать стороннюю поддержку для них.

DotNetZip также поддерживает zip-файлы, но API может быть более доступным, чем встроенный .net ZipPackage. SharpZipLib поддерживает еще несколько форматов файлов, включая Tar, GZip и BZip2.

Существует также возможность использовать 7Zip и все форматы, которые он поддерживает.

Существует также множество коммерческих вариантов: XCeed, Rebex, чтобы назвать пару.

На ваш вопрос нет четкого ответа, и вам придется выяснить, какой вариант будет работать лучше всего для вас, и определить, какую модель лицензирования вы хотите использовать.

person John Koerner    schedule 04.03.2014