Как извлечь zip-файл с помощью dotnet framework 4.0 без использования сторонних dll

Я в затруднении. Мне нужно загрузить zip-файл из сетевого расположения, а затем распаковать его на локальном компьютере и использовать файлы. Единственное ограничение - я не могу использовать сторонние dll.


person Apurva Saxena    schedule 09.08.2010    source источник
comment
Это похоже на дубликат этого вопроса: stackoverflow.com/ вопросы / 836736 /. Вы можете проверить там дополнительные ответы.   -  person Rich    schedule 09.08.2010
comment
Почему вы не можете использовать стороннюю библиотеку? Это глупое требование ... наверное, сделано кем-то из руководства;)   -  person Thomas Levesque    schedule 09.08.2010
comment
На самом деле это очень важное требование, поскольку отсутствие поддержки .NET Framework для zip-файлов усложняет добавление еще одной dll (и проблема безопасности верна, поскольку, если вы посмотрите на должную осмотрительность Microsoft с их кодом, она намного лучше, чем у большинства).   -  person Dinis Cruz    schedule 04.07.2012


Ответы (6)


В .NET framework 4.5 теперь есть System.IO.Compression.ZipFile.ExtractToDirectory(String, String) метод.

person Ivan Ičin    schedule 29.11.2012
comment
System.IO.Compression;) - person tanathos; 11.02.2013
comment
Упс, скорей пиши ... поправлю :) - person Ivan Ičin; 12.02.2013
comment
Мне нравится, как вопрос был задан специально для решения 4.0 и был выбран ответ 4.5 - person DontFretBrett; 27.06.2014
comment
И System.IO.Compression.FileSystem для класса ZipFile :) - person EKOlog; 13.08.2015
comment
Почему это предпочтительный ответ, если пользователь указал, что он должен работать с .NET 4.0. - person Krishnan Venkiteswaran; 06.03.2017
comment
Это не ответ, нужно знать, как это сделать с .NET ‹4.5 - person Abbas; 30.10.2020
comment
@Abbas, в то время, когда был задан вопрос, не было .NET 4.5, .NET 4.0 была последней версией, и вы можете интерпретировать ее как таковую, а не как конкретную версию. Как вы можете видеть выше, ответ о том, как это сделать в .NET 4.5, был явно полезен OP. Но вы, вероятно, лучше, чем OP, знаете, что он имел в виду и какой полезный ответ, верно? - person Ivan Ičin; 31.10.2020

Я не уверен, что он все еще доступен в VS2010, но в более ранних версиях J # был включен в VS, а J # включает класс java.util.zip в vjslib.dll, и, поскольку он является частью VS, это не сторонняя DLL, поэтому вы можете быть в состоянии сделать это таким образом.

Вот статья CodeProject, показывающая, как это сделать: Zip and Unzip from a C # program using J # runtime.

person Hans Olsson    schedule 09.08.2010
comment
Интересно, я не знал, что это там было ... - person Thomas Levesque; 09.08.2010
comment
Обратите внимание, что J # больше не поставляется с .NET Framework, хотя он по-прежнему поставляется с VS2005-2015. Для некоторых это все еще может быть верным решением. social.msdn.microsoft.com/Forums/office/en-US/ - person ErikusMaximus; 01.11.2017

Нет "хорошего" способа сделать это. Очевидно, вы могли бы реализовать алгоритм ZIP самостоятельно, используя общедоступную информацию о Структура файла ZIP и классы, такие как DeflateStream (хотя даже это может не сработать, если оно не сжато с использованием алгоритма DEFLATE). Некоторая информация о возможных альтернативах содержится в это сообщение в блоге, но вкратце это то, что вам придется либо использовать стороннюю библиотеку, либо переписать ее самостоятельно.

Если это ситуация, когда вы можете выпустить исходный код по GPL, вы можете скопировать и вставить код из проекта, например SharpZipLib в свою собственную, тем самым обойдя требование использования библиотеки DLL. Однако, кроме этого, почему вы не можете использовать сторонние библиотеки DLL?

person Ryan M    schedule 09.08.2010

Сама платформа .NET (в настоящее время) не имеет официальной поддержки файлов ZIP. Доступна пара высококачественных сторонних бесплатных библиотек, и среда выполнения J # поддерживает их, как отмечали другие.

Я рекомендую стороннее решение, но если вы абсолютно не можете этого сделать, есть еще одна хитрость: ZipPackage, который является частью WPF. Он поддерживает файлы ZIP (с добавлением дополнительных метаданных) и достаточно хорошо работает для чтения большинства файлов ZIP.

person Stephen Cleary    schedule 09.08.2010

GZipStream чаще всего используется для сжатия данных WCF. Не используйте это здесь.

Вы можете попробовать эту ZIP-библиотеку для сжатия в файлы:

http://www.icsharpcode.net/opensource/sharpziplib/

person Wojtek Turowicz    schedule 09.08.2010
comment
Это не похоже на вопрос WCF, и GZipStream не поможет с файлами ZIP, которые обычно используют алгоритм DEFLATE. - person Ryan M; 09.08.2010
comment
Вы не поняли мой пост. Я предложил другой подход ... - person Wojtek Turowicz; 09.08.2010
comment
SharpZipLib не будет работать с файлами, сжатыми хост-системой unix. Например, при создании на компьютере MacOSX с использованием внутреннего компрессора zip. - person Highmastdon; 24.04.2013

Быстрый поиск в Google показал это. Справочник MSDN по классу GZipStream

person Adrian    schedule 09.08.2010
comment
... однако этот класс по своей сути не обеспечивает функции для добавления файлов или извлечения файлов из архивов .zip ... - person Dan Byström; 09.08.2010