我在“ System.IO.Compression”命名空间中找不到“ ZipFile”类


111

我不能在名称空间“ 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”在当前上下文中不存在

我该如何解决?


Answers:


212

您需要额外的参考;最方便的方法是通过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版本。


2
我使用的是.NET 4.0 ...,但找不到该dll文件
Mohamed Kamal

17
@MohamedKamal的确,除非使用.NET 4.5,否则您将不会这样做,因为它直到那时才存在。请参阅“版本信息”信息-“支持的版本:4.5”
Marc Gravell

1
@MarcGravell我遇到了同样的错误。我检查了Visual Studio->帮助->关于Microsoft Visual Studio,它在.NET 4.5.51650版本中显示。接下来我应该检查什么?
foxwendy 2015年

4
我没有FileSystem参考。只有System.IO.Compression。谢谢。奇怪的是,它需要一个不在类命名空间中的文件。这与惯例有些奇怪。
克里斯·贝纳德

3
@ChrisBenard我发现了同样的问题。仅包括对System.IO.Compression的引用,我也需要FileSystem。确实很有趣。
dckuehn '16

32

对于那些是.NET中的绿色程序员的人,要添加MarcGravell指出的DLL参考,请按照下列步骤操作:

在Visual C#中添加引用

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

从MSDN文章中,如何:使用“添加引用”对话框添加或删除引用


1
谢谢(你的)信息。我已经使用过System.IO.Compression; 但随后必须如上所述添加对使用System.IO.Compression.FileSystem的引用,以使ZipFile进行编译而不会出现OP的原始错误。
休·希格拉斯

17

如果无法升级到4.5,则可以使用外部软件包。这样的一种就是来自DotNetZipLib的Ionic.Zip.dll。

using Ionic.Zip;

您可以在这里免费下载。http://dotnetzip.codeplex.com/


3
或通过NuGet安装它
northben 2014年

2
这与问题有什么关系?
eugenekgn 2014年

20
他的问题是“我该如何解决?” 这是修复它的一种方法-因为他的.net版本不支持它。
约翰·福克纳2014年

4
可悲的是,有时升级不是一个选择。进行投票。
sampathsris

1
如果要写入安装了XP的2000台PC,并且程序无法进行任何安装(以安装.net 4.5框架),则这是相关的
Mukus 2015年

10

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


我在无限的地方可以找到“参考文献”。您可以在哪里找到更多提示吗?
Daniel Kaplan

2

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


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




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.