124 votes

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 nom "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 puis-je le résoudre ?

3voto

hansss Points 191

Une solution qui m'a aidé : Allez dans Outils > NuGet Package Manager > Gérer les paquets NuGet pour la solution... > Parcourir > Recherchez System.IO.Compression.ZipFile et installez-le.

2voto

Michał Jarzyna Points 702

System.IO.Compression est désormais disponible en tant que paquet nuget maintenu par Microsoft.

Pour utiliser ZipFile vous devez télécharger System.IO.Compression.ZipFile paquet nuget .

1voto

Burgo855 Points 220

Je sais qu'il s'agit d'un vieux fil de discussion, mais je ne peux m'empêcher de poster des informations utiles à ce sujet. Je vois la question de la fermeture éclair revenir souvent et ceci répond à la plupart des questions courantes.

Pour contourner les problèmes de framework liés à l'utilisation de la version 4.5+... Il y a une classe ZipStorer créée par jaime-olivares : https://github.com/jaime-olivares/zipstorer Il a également ajouté un exemple d'utilisation de cette classe ainsi qu'un exemple de recherche d'un nom de fichier spécifique.

Et pour savoir comment l'utiliser et itérer pour une certaine extension de fichier par exemple, vous pouvez faire ceci :

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

1voto

prathesh p Points 17

Ajouter System.IO.Compression.ZipFile comme référence nuget, cela fonctionne.

0voto

Jose Ortega Points 563

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 plus (car il n'existe pas sur les versions plus anciennes).

Je viens de poster un script sur TechNet Peut-être que quelqu'un le trouvera utile il nécessite .net 4.5 ou 4.7

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X