web-dev-qa-db-fra.com

Je n'ai pas trouvé la classe "ZipFile" dans l'espace de noms "System.IO.Compression"

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?

104
Mohamed Kamal

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

192
Marc Gravell

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 #

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit sur le nœud du projet, puis cliquez sur Ajouter une référence.
  2. Dans la boîte de dialogue Ajouter une référence, sélectionnez l'onglet indiquant le type de composant que vous souhaitez référencer.
  3. Sélectionnez les composants que vous souhaitez référencer, puis cliquez sur OK.

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 .

28
Will Ediger

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/

17
John Faulkner

Allez simplement dans les références et ajoutez "System.IO.Compression.FileSystem".

8
user6604144

Une solution qui m'a aidée:

1
Hanssss

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.ZipFilenuget package .

0
Michał Jarzyna

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;

Ajouter une capture d'écran d'assemblage de référence

0
Erik Rausch

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();
}
0
Burgo855

Ajoutez System.IO.Compression.ZipFile comme référence de nuget, il fonctionne

0
prathesh p

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

0
Jose Ortega