116

我不能在名称空间“System.IO.Compression”中使用“Zipfile”类,我的代码是:

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”

我该如何解决?

4

10 回答 10

228

您需要为此提供额外的参考;最方便的方法是通过 NuGet 包System.IO.Compression.ZipFile

<!-- Version here correct at time of writing, but please check for latest -->
<PackageReference Include="System.IO.Compression.ZipFile" Version="4.3.0" />

如果您在没有 NuGet 的情况下使用 .NET Framework,则需要添加对程序集“System.IO.Compression.FileSystem.dll”的 dll 引用 - 并确保您至少使用 .NET 4.5(因为它没有存在于早期的框架中)。

有关信息,您可以从 MSDN找到程序集和 .NET 版本

于 2013-03-06T08:01:31.107 回答
32

对于那些是 .NET 中的绿色程序员的人,要按照MarcGravell所述添加 DLL 引用,请按照以下步骤操作:

在 Visual C# 中添加引用

  1. 在解决方案资源管理器中,右键单击项目节点,然后单击添加引用。
  2. 在“添加引用”对话框中,选择指示要引用的组件类型的选项卡。
  3. 选择要引用的组件,然后单击“确定”。

来自 MSDN 文章,如何:使用添加引用对话框添加或删除引用

于 2014-01-22T17:57:44.983 回答
18

如果无法升级到 4.5,可以使用外部包。其中之一是来自 DotNetZipLib 的 Ionic.Zip.dll。

using Ionic.Zip;

你可以在这里下载它,它是免费的。http://dotnetzip.codeplex.com/

于 2013-07-18T10:02:21.863 回答
12

只需转到参考并添加“System.IO.Compression.FileSystem”。

于 2016-07-18T14:39:23.680 回答
3

对我有帮助的解决方案:转到工具 > NuGet 包管理器 > 管理 NuGet Packaged for Solution... > 浏览 > 搜索 System.IO.Compression.ZipFile 并安装它

于 2018-10-22T10:07:16.867 回答
2

System.IO.Compression现在可以作为Microsoft 维护 的nuget 包使用。

要使用ZipFile,您需要下载System.IO.Compression.ZipFile nuget 包

于 2017-08-03T14:28:21.440 回答
1

我知道这是一个旧线程,但我不能避免发布一些有用的信息。我看到 Zip 问题出现了很多,这几乎回答了大多数常见问题。

为了解决使用 4.5+ 的框架问题......他们是由 jaime-olivares 创建的 ZipStorer 类: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();
}
于 2017-03-01T12:38:48.533 回答
1

在解决方案资源管理器中,右键单击引用,然后单击以展开程序集,找到 System.IO.Compression.FileSystem 并确保已选中。然后你可以在课堂上使用它 -using System.IO.Compression;

添加参考装配截图

于 2017-03-15T15:02:11.627 回答
1

添加 System.IO.Compression.ZipFile 作为 nuget 参考它正在工作

于 2018-03-05T13:06:59.510 回答
0

这里的问题是您刚刚添加了对 System.IO.Compression 的引用它缺少对 System.IO.Compression.Filesystem.dll 的引用

而且您需要在 .net 4.5 或更高版本上执行此操作(因为它在旧版本中不存在)。

我刚刚在 TechNet 上发布了一个脚本 也许有人会发现它很有用,它需要 .net 4.5 或 4.7

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

于 2018-02-12T01:50:09.997 回答