Работа со сжатыми файлами в C#

#c# #compression

#c# #сжатие

Вопрос:

Я ищу библиотеку c # с открытым исходным кодом, но лицензированную для разработки в проектах с закрытым исходным кодом (так что что-то вроде стиля MIT / BSD), которая позволяет мне работать со сжатыми файлами. Я действительно не очень разборчив в том, какое сжатие используется, только в том, что это что-то обычное (.zip, .rar, .tar, .tar.gz и т.д. …).

Причина, по которой мне нужна эта функциональность, заключается в том, что я создаю платформу веб-приложений, и прямо сейчас лучшим и простым способом создания и распространения модулей (или подключаемых модулей) для платформы, я думаю, является сжатый файл. Сжатый файл будет содержать .файлы dll, которые будут включать исходный код и razor views, а также любое количество вспомогательных файлов (изображения, dotlesscss, javascript и т.д.). Что я хочу иметь возможность делать через саму платформу веб-приложений, позволяя пользователю иметь возможность просто загружать один сжатый файл, а веб-приложение копировать файл, извлекать из него все файлы и копировать извлеченные файлы в правильные местоположения.

Ответ №1:

Это уже встроено в .net framework 🙂 просто ознакомьтесь с пространством имен сжатия:
http://msdn.microsoft.com/en-us/library/system.io.compression.aspx

Ответ №2:

DotNetZip — довольно популярная библиотека с открытым исходным кодом. В нем используется Microsoft Public License (Ms-PL) лицензия, о которой вы можете прочитать здесь и посмотреть, соответствует ли она вашим потребностям.

Ответ №3:

.net уже имеет встроенную поддержку gzip и deflate в system.io.compression

Ответ №4:

Если вам нужна функция ZIP, то она на самом деле отсутствует в .Net Framework, и вам нужно обратиться к сторонней библиотеке, такой как SharpZipLib или DotNetZip. SharpZipLib — это не BSD, это GPL или LGPL, и, возможно, вам не подходит, исходя из вашего описания. DotNetZip — это Ms-PL, который похож на BSD, проверьте http://www.opensource.org/licenses/ms-pl .

поток GZIP доступен в пространстве имен System.IO.Compression, которое встроено в библиотеку базовых классов .NET Framework, но этот поток не считывается и не распаковывается tar.gz файлы, которые, я полагаю, вы хотели бы использовать, если бы объединяли несколько файлов вместе. Сам GZIP по умолчанию хранит только ОДИН файл в сжатом архиве, и вы можете использовать этот GZipStream для этого, но он не будет выполнять Tars. SharpZipLib делает Tars, но … лицензия.

Существуют библиотеки tar сторонних производителей Ms-PL (небольшого размера), которые в сочетании с GZIP в .NET позволяют читать tar.gz файлы (или .tgz) легко.
http://cheeso.members.winisp.net/srcview.aspx?dir=Tar

Ответ №5:

Если вы хотите упаковать несколько файлов в один сжатый файл, рассмотрите возможность использования классов из System.IO.Packaging — http://msdn.microsoft.com/en-us/library/ms569886.aspx — позволяет помещать файлы в Zip-файл (требуется один дополнительный XML-файл поверх вашего содержимого).