Недавно в моем проекте .
NET/C# мне понадобилась функциональность для создания и распаковки zip-архивов.
Казалось бы, это очень простые операции, учитывая, что Windows Explorer уже давно умеет работать с zip-файлами и я предполагал, что Microsoft предоставляет API для работы с ними.
Отсутствие классов для работы с zip в .
NET framework меня не удивило, но и не очень порадовало.
Меня раздражало отсутствие функционала по работе с zip в различных неуправляемых Windows API (WinAPI, COM-интерфейсах и т.д.).
На данный момент весь исходный код проекта разработан мной и включать в дистрибутив дополнительный сторонний файл .
dll мне не хотелось из-за простейшего функционала.
После поиска в интернете и в msdn я выбрал из следующих решений:
- В .
NET Framework есть класс System.IO.Packaging.ZipPackage, но насколько я понимаю, с его помощью нельзя полноценно работать с zip-архивами, к тому же он появился только в .
NET 3.5, к которому я не прикасался.
очень хочу связать свой проект. Этот класс использует класс MS.Internal.IO.Zip.ZipArchive, но, как следует из названия, доступ к нему отключен.
Интересно, почему.
- В .
NET Framework для J# есть класс java.util.zip.ZipFile, а в MSDN — статья как использовать его из C#.
Но Visual J# Framework не включен в .
NET Framework, поэтому его необходимо включить.
Распространяемый пакет Visual J# в свой дистрибутив, а это 3,6 мегабайта вообще бесполезного для меня кода.
Не очень элегантно.
- мини-zip — надстройка для zlib, написанная на C. Для использования в .
NET понадобится сборка dll + interop.
- Сторонние библиотеки SharpZipLib И ДотНетЗип .
Оба полностью написаны и предоставляют довольно широкий спектр функций.
Ни один из вышеперечисленных вариантов меня не устроил полностью, поэтому я решил разработать свой.
В .
NET Framework есть класс System.IO.Compression.DeflateStream, который может упаковывать и распаковывать данные на основе алгоритма выкачивания.
Вам нужно только уметь читать/записывать внутреннюю структуру zip-архива, которая описана в разделе Характеристики .
В результате за пару дней я разработал небольшую и простую библиотеку, умеющую распаковывать и создавать zip-файлы как в файловой системе, так и в памяти:
- Он поддерживает только алгоритм сжатия deflate и, конечно же, store.
- Умеет работать с архивами, содержащими имена файлов в формате utf8.
- Он нормально распаковывает zip-архивы, созданные WinRAR и, возможно, многими другими программами для Windows. Я также встречал zip-архивы, которые не поддерживаются моей библиотекой.
В моем проекте эти требования соблюдены, поэтому разработанное решение меня вполне устроило.
Я не ставил перед собой задачу разработать библиотеку с открытым исходным кодом, документацией и удобным API. Я просто хотел вам рассказать и привести пример работы с ZIP из .
NET без использования сторонних библиотек.
Вы можете скачать исходники и пример Здесь .
Буду рад, если кому-то пригодится :) Теги: #zip #Сжатие данных #Чулан
-
Настройка Unity
19 Oct, 24 -
Ведь Они Стартовали.
19 Oct, 24 -
Предыдущее И Следующее Действие В Веб-Формах
19 Oct, 24 -
Хабрафутбол В Северной Столице: Отчет
19 Oct, 24