Je ne peux pas utiliser la classe "Zipfile" dans l'espace de noms "System.IO.Compression", mon code est:
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);
}
}
}
l'erreur est:
Le nom 'zipfile' n'existe pas dans le contexte actuel
Comment je peux le résoudre?
Vous devez ajouter une référence à une DLL, "System.IO.Compression.FileSystem.dll", et vous assurer que vous utilisez bien .NET 4.5 (puisqu'il n'existe pas dans les frameworks précédents).
Pour plus d'informations, vous pouvez trouver les versions Assembly et .NET à partir de MSDN
Pour ceux qui sont des programmeurs verts en .NET, pour ajouter la référence DLL en tant que MarcGravell remarque, procédez comme suit:
Pour ajouter une référence dans Visual C #
Dans l'article MSDN, Comment: ajouter ou supprimer des références à l'aide de la boîte de dialogue Ajouter une référence .
vous pouvez utiliser un paquet externe si vous ne pouvez pas passer à la version 4.5. Un tel est Ionic.Zip.dll de DotNetZipLib.
using Ionic.Zip;
vous pouvez le télécharger ici, c'est gratuit. http://dotnetzip.codeplex.com/
Allez simplement dans les références et ajoutez "System.IO.Compression.FileSystem".
Une solution qui m'a aidée:
System.IO.Compression
est maintenant disponible sous forme de paquet nuget maintenu par Microsoft.
Pour utiliser ZipFile
, vous devez télécharger System.IO.Compression.ZipFile
nuget package .
Dans l'explorateur de solutions, cliquez avec le bouton droit de la souris sur Références, puis sur pour développer des assemblys, recherchez System.IO.Compression.FileSystem et assurez-vous que la case est cochée. Ensuite, vous pouvez l’utiliser dans votre classe - using System.IO.Compression;
Je sais que c'est un vieux fil de discussion, mais je ne peux tout simplement pas m'empêcher de publier des informations utiles à ce sujet. Je vois beaucoup la question Zip et cela répond à peu près à la plupart des questions courantes.
Pour résoudre les problèmes de framework liés à l’utilisation de 4.5 + ... Il s’agit d’une classe ZipStorer créée par jaime-olivares: https://github.com/jaime-olivares/zipstorer , il a également ajouté un exemple de procédure utilise également cette classe et a également ajouté un exemple sur la manière de rechercher un nom de fichier spécifique.
Et pour référence sur la façon de l'utiliser et de parcourir une extension de fichier donnée, vous pouvez le faire à titre d'exemple:
#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();
}
Ajoutez System.IO.Compression.ZipFile comme référence de nuget, il fonctionne
Le problème ici est que vous venez d'ajouter la référence à System.IO.Compression, il manque la référence à System.IO.Compression.Filesystem.dll
Et vous devez le faire sur .net 4.5 ou version ultérieure (car il n’existe pas sur les anciennes versions).
Je viens de publier un script sur TechNet. Peut-être que quelqu'un le trouverait utile, il nécessite .net 4.5 ou 4.7
https://gallery.technet.Microsoft.com/scriptcenter/Create-a-Zip-file-from-a-b23a7530