c# - examples - No encontré la clase "ZipFile" en el espacio de nombres "System.IO.Compression"
save zip c# (9)
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?
Agregue System.IO.Compression.ZipFile como referencia Nuget está funcionando
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
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
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;
Para aquellos que son programadores verdes en .NET, para agregar la referencia de DLL como notó , siga estos pasos:
Para agregar una referencia en Visual C #
- En el Explorador de soluciones, haga clic con el botón derecho en el nodo del proyecto y haga clic en Agregar referencia.
- En el cuadro de diálogo Agregar referencia, seleccione la pestaña que indica el tipo de componente al que desea hacer referencia.
- 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 .
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
/// <summary>
/// Custom Method - Check if ''string'' has ''.png'' or ''.PNG'' extension.
/// </summary>
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<ZipStorer.ZipFileEntry> 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();
}
Simplemente vaya a Referencias y agregue "System.IO.Compression.FileSystem".
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/
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 .