No encontré la clase “ZipFile” en el espacio de nombres “System.IO.Compression”

No puedo usar la clase “Zipfile” en el espacio de nombres “System.IO.Compression” mi código es:

using System; using System.IO; using System.IO.Compression; namespace ConsoleApplication { class Program { static void Main(string[] args) { string startPath = @"c:\example\start"; string zipPath = @"c:\example\result.zip"; string extractPath = @"c:\example\extract"; ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest,true); ZipFile.ExtractToDirectory(zipPath, extractPath); } } } 

el error es:

El nombre ‘zipfile’ no existe en el contexto actual

¿Cómo puedo resolverlo?

Debe agregar una referencia dll al ensamblado, “System.IO.Compression.FileSystem.dll”, y asegúrese de estar utilizando .NET 4.5 (ya que no existe en marcos anteriores).

Para obtener información, puede encontrar el ensamblaje y la versión .NET de MSDN

Para aquellos que son progtwigdores verdes en .NET, para agregar la referencia de DLL como notó MarcGravell , siga estos pasos:

Para agregar una referencia en Visual C #

  1. En el Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto y haga clic en Agregar referencia.
  2. En el cuadro de diálogo Agregar referencia, seleccione la pestaña que indica el tipo de componente al que desea hacer referencia.
  3. Seleccione los componentes a los que desea hacer referencia y luego haga clic en Aceptar.

Desde el artículo de MSDN, Cómo agregar o quitar referencias mediante el cuadro de diálogo Agregar referencia .

puede usar un paquete externo si no puede actualizar a 4.5. Uno de ellos es Ionic.Zip.dll de DotNetZipLib.

 using Ionic.Zip; 

puedes descargarlo aquí, es gratis. http://dotnetzip.codeplex.com/

Simplemente vaya a Referencias y agregue “System.IO.Compression.FileSystem”.

Sé que este es un hilo viejo, pero no puedo evitar publicar información útil sobre esto. Veo que la pregunta de Zip surge mucho y esto responde casi la mayoría de las preguntas comunes.

Para evitar problemas de Framework al usar 4.5 + … Su es una clase de ZipStorer creada por jaime-olivares: https://github.com/jaime-olivares/zipstorer , también ha agregado un ejemplo de cómo usar esta clase como bien y también ha agregado un ejemplo de cómo buscar un nombre de archivo específico también.

Y para referencia sobre cómo usar esto e iterar a través de una determinada extensión de archivo como ejemplo, puede hacer esto:

 #region ///  /// Custom Method - Check if 'string' has '.png' or '.PNG' extension. ///  static bool HasPNGExtension(string filename) { return Path.GetExtension(filename).Equals(".png", StringComparison.InvariantCultureIgnoreCase) || Path.GetExtension(filename).Equals(".PNG", StringComparison.InvariantCultureIgnoreCase); } #endregion private void button1_Click(object sender, EventArgs e) { //NOTE: I recommend you add path checking first here, added the below as example ONLY. string ZIPfileLocationHere = @"C:\Users\Name\Desktop\test.zip"; string EXTRACTIONLocationHere = @"C:\Users\Name\Desktop"; //Opens existing zip file. ZipStorer zip = ZipStorer.Open(ZIPfileLocationHere, FileAccess.Read); //Read all directory contents. List dir = zip.ReadCentralDir(); foreach (ZipStorer.ZipFileEntry entry in dir) { try { //If the files in the zip are "*.png or *.PNG" extract them. string path = Path.Combine(EXTRACTIONLocationHere, (entry.FilenameInZip)); if (HasPNGExtension(path)) { //Extract the file. zip.ExtractFile(entry, path); } } catch (InvalidDataException) { MessageBox.Show("Error: The ZIP file is invalid or corrupted"); continue; } catch { MessageBox.Show("Error: An unknown error ocurred while processing the ZIP file."); continue; } } zip.Close(); } 

En el explorador de soluciones, haga clic con el botón derecho en Referencias, luego haga clic para expandir ensamblajes, busque System.IO.Compression.FileSystem y asegúrese de que esté marcado. Entonces puede usarlo en su clase – using System.IO.Compression;

Agregar captura de pantalla de ensamblaje de referencia

System.IO.Compression ahora está disponible como un paquete nuget mantenido por Microsoft.

Para usar ZipFile necesita descargar el paquete System.IO.Compression.ZipFile nuget .

El problema aquí es que acaba de agregar la referencia a System.IO.Compression le falta la referencia a System.IO.Compression.Filesystem.dll

Y debe hacerlo en .NET 4.5 o posterior (porque no existe en versiones anteriores).

Acabo de publicar un script en TechNet Quizás alguien lo encuentre útil. Requiere .net 4.5 o 4.7

https://gallery.technet.microsoft.com/scriptcenter/Create-a-Zip-file-from-a-b23a7530

Agregue System.IO.Compression.ZipFile como referencia Nuget está funcionando