Я в затруднении. Мне нужно загрузить zip-файл из сетевого расположения, а затем распаковать его на локальном компьютере и использовать файлы. Единственное ограничение - я не могу использовать сторонние dll.
Как извлечь zip-файл с помощью dotnet framework 4.0 без использования сторонних dll
Ответы (6)
В .NET framework 4.5 теперь есть System.IO.Compression.ZipFile.ExtractToDirectory(String, String)
метод.
Я не уверен, что он все еще доступен в VS2010, но в более ранних версиях J # был включен в VS, а J # включает класс java.util.zip
в vjslib.dll, и, поскольку он является частью VS, это не сторонняя DLL, поэтому вы можете быть в состоянии сделать это таким образом.
Вот статья CodeProject, показывающая, как это сделать: Zip and Unzip from a C # program using J # runtime.
Нет "хорошего" способа сделать это. Очевидно, вы могли бы реализовать алгоритм ZIP самостоятельно, используя общедоступную информацию о Структура файла ZIP и классы, такие как DeflateStream (хотя даже это может не сработать, если оно не сжато с использованием алгоритма DEFLATE). Некоторая информация о возможных альтернативах содержится в это сообщение в блоге, но вкратце это то, что вам придется либо использовать стороннюю библиотеку, либо переписать ее самостоятельно.
Если это ситуация, когда вы можете выпустить исходный код по GPL, вы можете скопировать и вставить код из проекта, например SharpZipLib в свою собственную, тем самым обойдя требование использования библиотеки DLL. Однако, кроме этого, почему вы не можете использовать сторонние библиотеки DLL?
Сама платформа .NET (в настоящее время) не имеет официальной поддержки файлов ZIP. Доступна пара высококачественных сторонних бесплатных библиотек, и среда выполнения J # поддерживает их, как отмечали другие.
Я рекомендую стороннее решение, но если вы абсолютно не можете этого сделать, есть еще одна хитрость: ZipPackage, который является частью WPF. Он поддерживает файлы ZIP (с добавлением дополнительных метаданных) и достаточно хорошо работает для чтения большинства файлов ZIP.
GZipStream чаще всего используется для сжатия данных WCF. Не используйте это здесь.
Вы можете попробовать эту ZIP-библиотеку для сжатия в файлы:
http://www.icsharpcode.net/opensource/sharpziplib/
Быстрый поиск в Google показал это. Справочник MSDN по классу GZipStream