2010-08-09 47 views
15

Estoy en un aprieto. Necesito descargar un archivo zip de la ubicación de la red y luego descomprimirlo en la máquina local y usar los archivos. La única restricción es que no puedo usar dll de terceros.Cómo extraer un archivo zip usando dotnet framework 4.0 sin usar dlls de terceros

+0

Esto parece un duplicado de esta pregunta: http://stackoverflow.com/questions/836736/unzip-files-programmatically-in-net. Es posible que desee comprobar si hay más respuestas. – Rich

+2

¿Por qué no puedes usar una biblioteca de terceros? Es un requisito estúpido ... probablemente hecho por alguien en la administración;) –

+0

En realidad, es un requisito muy importante ya que la falta de compatibilidad con .NET Framework para las cremalleras agrega la complejidad de agregar otra dll (y el problema de seguridad es cierto ya que si mira la diligencia debida de Microsoft con su código, es mucho mejor que la mayoría) –

Respuesta

10

En .NET framework 4.5 ahora existe el método System.IO.Compression.ZipFile.ExtractToDirectory(String, String).

+0

System.IO.Compression;) – tanathos

+0

OOps, escritura rápida ... Lo corregiré :) –

+19

Me gusta cómo se seleccionó específicamente la pregunta 4.0 y se seleccionó una respuesta de 4.5 – DontFretBrett

0

Una rápida búsqueda en Google lo hizo subir. GZipStream Class MSDN Reference

+5

"... sin embargo, esta clase no proporciona intrínsecamente funcionalidad para agregar archivos o extraer archivos de archivos .zip ..." –

3

No hay una "buena" forma de hacerlo. Obviamente, puede implementar el algoritmo ZIP utilizando information públicamente disponible en la estructura de archivos ZIP y clases como DeflateStream (aunque incluso esto puede no funcionar si no se comprime utilizando el algoritmo DEFLATE). Hay alguna información sobre posibles alternativas en this blog post, pero la versión corta es que tendrá que usar una biblioteca de terceros o volver a escribir uno usted mismo.

Si esta es una situación en la que podría liberar el código fuente de manera GPL, podría copiar y pegar el código de un proyecto como SharpZipLib en el suyo, evitando así el requisito de usar el DLL . Aparte de eso, ¿por qué no puedes usar DLL de terceros?

0

GZipStream es el más comúnmente utilizado para la compresión de datos WCF. No uses eso aquí.

Usted puede tratar de esta biblioteca postal para comprimir en archivos:

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

+2

Esto no aparece ser una pregunta de WCF, y GZipStream no va a ayudar con los archivos ZIP, que generalmente usan el algoritmo DEFLATE. –

+0

No entendiste mi publicación. Sugerí otro enfoque ... – Turowicz

+0

SharpZipLib fallará con los archivos comprimidos por un sistema host de Unix.Por ejemplo, cuando se hace en una máquina MacOSX, usando el compresor zip interno – Highmastdon

4

No estoy seguro de si todavía está disponible en VS2010, pero en versiones anteriores J # fue incluida en VS y J # incluye el java.util.zip clase en el vjslib.dll, y ya que es parte de VS, no es una DLL de terceros, por lo que es posible que pueda hacerlo de esa manera.

Aquí hay un artículo CodeProject que muestra cómo hacer esto: Zip and Unzip from a C# program using J# runtime

+0

Interesante, no sabía que estaba allí ... –

+0

Tenga en cuenta que J # ya no se incluye con .NET Framework, aunque todavía se envía con VS2005- 2015. Esta podría ser una solución válida para algunas personas. https://social.msdn.microsoft.com/Forums/office/en-US/627b5ca3-fac7-461f-9e3a-824fd2a5eb32/problem-with-vjslibdll?forum=netfxbcl – ErikusMaximus

2

El marco .NET en sí no (actualmente) tienen soporte oficial para archivos ZIP. Hay un par de bibliotecas libres de terceros de alta calidad disponibles, y el tiempo de ejecución de J # lo admite, como han notado otros.

Recomiendo la solución de terceros, pero si absolutamente no puedes hacer eso, entonces hay otro truco: ZipPackage, que es parte de WPF. Es tipo de compatible con archivos ZIP (aumentado con metadatos adicionales), y funciona lo suficientemente bien para leer más archivos ZIP.

Cuestiones relacionadas