Как я могу создавать архивы 7-Zip из моего консольного приложения C #? Мне нужно иметь возможность извлекать архивы с помощью обычной широко доступной программы 7-Zip .
Вот мои результаты с примерами, предоставленными в качестве ответов на этот вопрос.
- «Обстрел» до 7z.exe - это самый простой и эффективный подход, и я могу подтвердить, что он работает нормально . Как упоминает workmad3 , мне просто нужно гарантировать, что 7z.exe установлен на всех целевых машинах, что я могу гарантировать.
- 7Zip сжатие в памяти - это относится к сжатию файлов cookie «в памяти» перед отправкой клиенту; этот метод кажется несколько многообещающим. Тип возвращаемого значения методов-оберток (обертывающих LZMA SDK )
byte[]
. Когда я записываюbyte[]
массив в файл, я не могу извлечь его с помощью 7-Zip (File.7z is not supported archive
). - 7zSharp Wrapper (находится на CodePlex) - это оболочка для 7z exe / LZMA SDK . Я сослался на проект из своего приложения, и он успешно создал несколько архивных файлов, но мне не удалось извлечь файлы с помощью обычной программы 7-Zip (
File.7z is not supported archive
). - 7Zip SDK, также известный как LZMA SDK - я думаю, я недостаточно умен, чтобы понять, как его использовать (поэтому я опубликовал здесь) ... Любые примеры рабочего кода, демонстрирующие создание архива 7zip, который может быть извлечен обычная программа 7zip?
- CodeProject C # (.NET) Интерфейс для библиотек DLL 7-Zip Archive - поддерживает извлечение только из архивов 7zip ... Мне нужно их создать!
- SharpZipLib - Согласно их FAQ , SharpZipLib не поддерживает 7zip.
c#
.net
compression
7zip
Сейбар
источник
источник
Ответы:
Если вы можете гарантировать, что приложение 7-zip будет установлено (и в пути) на всех целевых машинах, вы можете разгрузить его, вызвав приложение командной строки 7z. Не самое элегантное решение, но зато работать меньше всего.
источник
Пример файла cookie EggCafe 7Zip Это пример (сжатый файл cookie) с DLL 7Zip.
CodePlex Wrapper Это проект с открытым исходным кодом, который искажает функцию архивирования 7z.
7Zip SDK Официальный SDK для 7zip (C, C ++, C #, Java) <--- Мое предложение
.Net zip-библиотека от SharpDevelop.net
Пример CodeProject с 7zip
SharpZipLib Многие молнии
источник
SevenZipSharp - еще одно решение. Создает 7-zip архивы ...
источник
Вот полный рабочий пример с использованием SevenZip SDK на C #.
Он будет записывать и читать стандартные файлы 7zip, созданные приложением Windows 7zip.
PS. Предыдущий пример никогда не собирался распаковывать, потому что он никогда не записывал необходимую информацию о свойствах в начало файла.
источник
Я использовал sdk.
например:
источник
Просто установите 7 zip из источника и передайте параметр методу.
Спасибо. Пожалуйста, понравился ответ.
источник
Я использую этот код
источник
Установите пакет NuGet под названием
SevenZipSharp.Interop
Затем:
источник
Некоторая дополнительная информация о тестировании кода @Orwellophile с использованием текстового файла размером 17,9 МБ.
Использование значений свойств в примере кода «как есть» окажет ОГРОМНОЕ отрицательное влияние на производительность, это займет 14,16 секунды .
Установка следующих свойств делает то же самое за 3,91 секунды (например, в архиве будет та же информация о контейнере, которая: вы можете извлечь и протестировать архив с помощью 7zip, но нет информации о имени файла)
Родной 7zip 2 сек.
Я провел еще один тест, используя собственный 7zip и файл резервной копии SQL объемом 1,2 ГБ (.bak)
7zip (максимальное сжатие): 1 минута
LZMA SDK (@Orwellophile с указанным выше параметром свойства): 12:26 мин :-(
Выходной файл примерно того же размера .
Поэтому я думаю, что сам буду использовать решение, основанное на движке c / c ++, например, либо вызову исполняемый файл 7zip из C #, либо использую squid-box / SevenZipSharp , который является оболочкой для файла dll 7zip c / c ++, и кажется быть новейшим форком SevenZipSharp. Обертку не тестировал, но надеюсь, что она работает так же, как родной 7zip. Но, надеюсь, это даст возможность сжимать поток, чего вы, очевидно, не сможете, если вызовете exe напрямую. В противном случае, я думаю, нет большого преимущества перед вызовом exe. Оболочка имеет некоторые дополнительные зависимости, поэтому она не сделает ваш опубликованный проект «чище».
Кстати, похоже, что команда .Net Core рассматривает возможность реализации LZMA в классе system.io в .Core ver. 5, это было бы здорово!
(Я знаю, что это своего рода комментарий, а не ответ, но чтобы иметь возможность предоставить фрагмент кода, это не может быть комментарий)
источник
Самый простой способ - работать с файлами .zip вместо .7z и использовать Dot Net Zip.
При отключении команд 7zip для оболочки возникают другие проблемы, такие как права пользователя, у меня возникла проблема с SevenZipSharp.
источник
На мой взгляд, SharpCompress - одна из самых умных библиотек сжатия. Он поддерживает LZMA (7-zip), прост в использовании и находится в активной разработке.
Поскольку он уже имеет поддержку потоковой передачи LZMA, на момент написания, к сожалению, он поддерживает только чтение 7-zip архивов. НО запись архива находится в их списке задач (см. Readme). Для будущих читателей: проверьте, чтобы узнать текущий статус здесь: https://github.com/adamhathcock/sharpcompress/blob/master/FORMATS.md
источник