Я не нашел класс "ZipFile" в пространстве имен "System.IO.Compression"

Я не могу использовать класс Zipfile в пространстве имен "System.IO.Compression", мой код:

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

ошибка:

Имя "zipfile" не существует в текущем контексте

Как я могу это решить?

Ответ 1

Вам нужно добавить ссылку на DLL на сборку "System.IO.Compression.FileSystem.dll" и убедиться, что вы используете .NET 4.5 (поскольку она не существует в ранних версиях).

Для информации вы можете найти сборку и версию .NET версии из MSDN.

Ответ 2

Для тех, кто является зеленым программистом в .NET, чтобы добавить ссылку на DLL как MarcGravell, выполните следующие действия:

Чтобы добавить ссылку в Visual С#

  • В обозревателе решений щелкните правой кнопкой мыши проект node и нажмите "Добавить ссылку".
  • В диалоговом окне "Добавить ссылку" выберите вкладку, указывающую тип компонента, который вы хотите ссылаться.
  • Выберите компоненты, которые вы хотите ссылаться, и нажмите кнопку "ОК".

Из статьи MSDN Как добавить или удалить ссылки с помощью диалогового окна Добавить ссылку.

Ответ 3

вы можете использовать внешний пакет, если вы не можете обновить до 4.5. Одним из таких является Ionic.Zip.dll из DotNetZipLib.

using Ionic.Zip;

вы можете скачать его здесь, бесплатно. http://dotnetzip.codeplex.com/

Ответ 4

Просто перейдите к ссылкам и добавьте "System.IO.Compression.FileSystem".

Ответ 5

Я знаю, что это старый поток, но я просто не могу уклониться от публикации полезной информации об этом. Я вижу, что проблема с Zip возникает много, и это почти соответствует большинству распространенных вопросов.

Чтобы решить проблемы с использованием 4.5 +... Это класс ZipStorer, созданный jaime-olivares: https://github.com/jaime-olivares/zipstorer, он также добавил пример того, как использовать этот класс, а также добавил пример того, как искать определенное имя файла.

И для справки о том, как использовать это и итерации для определенного расширения файла в качестве примера, вы можете сделать это:

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

Ответ 6

В проводнике решений щелкните правой кнопкой мыши ссылку, затем щелкните, чтобы развернуть сборки, найти System.IO.Compression.FileSystem и убедиться, что она проверена. Затем вы можете использовать его в своем классе - using System.IO.Compression;

Добавить скриншот сборки ссылок

Ответ 7

System.IO.Compression теперь доступен как пакет nuget, поддерживаемый Microsoft.

Чтобы использовать ZipFile, вам нужно скачать System.IO.Compression.ZipFile пакет nuget.