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

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

How I can solve it ?

145670 次浏览

您需要一个额外的参考,最方便的方法是通过 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" />

如果你正在。NET Framework 而没有 NuGet,您需要向程序集添加一个 dll 引用,“ System.IO.Compress。并确保您至少正在使用。NET 4.5(因为在早期的框架中不存在)。

For info, you can find the assembly and .NET version(s) 来自 MSDN

如果无法升级到4.5,可以使用外部软件包。

using Ionic.Zip;

你可以在这里免费下载

对于那些在.NET 中是绿色程序员的人来说,要添加 MarcGravell中提到的 DLL 引用,您需要遵循以下步骤:

在 Visual C # 中添加引用

  1. 在“解决方案资源管理器”中,右键单击项目节点并单击“添加引用”。
  2. 在“添加引用”对话框中,选择指示要引用的组件类型的选项卡。
  3. Select the components you want to reference, and then click OK.

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

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

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

为了解决使用4.5 + 的框架问题... ... 他们创建了一个由 jaime-olivares: https://github.com/jaime-olivares/zipstorer创建的 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();
}

在解决方案资源管理器中,右键单击“引用”,然后单击以展开程序集,找到 System.IO.Compress。文件系统,并确保它被检查。然后你可以用它在你的类 -using System.IO.Compression;

添加引用程序集屏幕截图

System.IO.Compression现在可以作为由 Microsoft 维护的 Nuget 套餐使用。

要使用 ZipFile,您需要下载 System.IO.Compression.ZipFile Nuget 套餐

The issue here is that you just Added the reference to System.IO.Compression it is missing the reference to 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

添加 System.IO.Compression.ZipFile 作为正在运行的 nuget 引用

一个对我有帮助的解决方案: 转到工具 > NuGet 软件包管理器 > 管理 NuGet 软件包的解决方案... > 浏览 > Search for System.IO.Compression.ZipFile and install it