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

时间:2013-03-06 07:59:14

标签: c# zip

我不能在名称空间“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”

我如何解决?

10 个答案:

答案 0 :(得分:195)

您需要向程序集添加一个dll引用,“System.IO.Compression.FileSystem.dll” - 并确保您使用的是.NET 4.5(因为它在早期的框架中不存在)。

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

答案 1 :(得分:28)

对于那些在.NET中是绿色程序员的人来说,要将MarcGravell注释为DLL引用,请按照以下步骤操作:

在Visual C#中添加引用

  1. 在Solution Explorer中,右键单击项目节点,然后单击Add Reference。
  2. 在“添加引用”对话框中,选择指示要引用的组件类型的选项卡。
  3. 选择要引用的组件,然后单击“确定”。
  4. 来自MSDN文章How to: Add or Remove References By Using the Add Reference Dialog Box

答案 2 :(得分:17)

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

using Ionic.Zip;

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

答案 3 :(得分:9)

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

我知道这是一个老线程,但我无法避免发布一些有用的信息。我看到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();
}

答案 6 :(得分:0)

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

Add Reference Assembly Screenshot

答案 7 :(得分:0)

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

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

答案 8 :(得分: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

答案 9 :(得分:0)

将System.IO.Compression.ZipFile添加为nuget引用它正在工作