您认为哪种方法是“最好”的呢?
- 使用
System.IO.Packaging
命名空间? - 与 Shell 进行互操作?
- 使用 .NET 的第三方库?
- 与开源非托管 DLL 进行互操作?
[我可以针对 Framework 3.5;最佳 = 设计,实现和维护最简单。]
我主要关注的是您为什么认为所选择的方法是最好的。
您认为哪种方法是“最好”的呢?
System.IO.Packaging
命名空间?[我可以针对 Framework 3.5;最佳 = 设计,实现和维护最简单。]
我主要关注的是您为什么认为所选择的方法是最好的。
我一直使用 SharpZipLib
忘了为什么:主要是因为它已经存在了很长时间。 它有很好的文档,并且具有直观的API。 此外,如果你喜欢开源软件,它也是开源的。
我发现DotNetZip库是处理zip文件最简便的方式。而SharpZipLib则是一种更为强大和灵活的解决方案。
我知道这已经是一个老问题了,但我想添加一个更加最新的答案。如果你使用的是.NET 4.5,那么你可以使用新的内置ZipFile
类轻松地以编程方式将多个文件保存到ZIP文件夹中。
首先,您需要将文件准备好放入一个新文件夹中(Directory.CreateDirectory
, File.Move
),然后您就可以简单地使用ZipFile.CreateFromDirectory
方法(改编自链接页面):
string filePathOfNewFolder = @"c:\example\start";
string zipFilePath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(filePathOfNewFolder, zipFilePath);
DotNetZip非常易于使用。我喜欢它,因为它完全受控制-不需要与 shell 交互。编程模型比 shell 更简单清晰。而且它比SharpZipLib和.NET 3.0中添加的 Packaging 类更简单。它是免费的、小巧的、活跃维护的。
它比一个用户提供的 J# 选项要好得多-J# 是一个巨大的运行时环境,只为了获取 ZIP 支持就需要吞下一颗巨大的药丸。而且 J# 的支持正在被终止。引入新的依赖关系可能并不是一个好主意。
DotNetZip 的示例代码:
try
{
using (ZipFile zip = new ZipFile(args[0], System.Console.Out))
{
zip.AddDirectory(args[1]); // recurses subdirectories
zip.Save();
}
}
catch (System.Exception ex1)
{
System.Console.Error.WriteLine("exception: " + ex1);
}
DotNetZip可以与.NET v2.0、3.0、3.5以及Compact Framework v2.0和3.5一起使用。它支持ZIP文件、Unicode文件名、注释、密码。它支持ZIP64以及自解压缩存档。它的速度很快。试一下吧。
目前还没有人提到Xceed Zip组件。我之前使用过它,对于创建zip文件和压缩数据流非常出色。我强烈推荐它,但可能需要支付许可费。
由于您的目标是 Framework 3.5,我建议使用 System.IO.Packaging
。它是一个专门用于压缩的库,并且随着框架一起提供,因此产品中甚至不需要额外的 DLL。但是,使用示例非常糟糕。
不推荐使用 shell。首先,它只适用于 Windows XP 及以上版本。但即使您不关心这一点,它的缺陷也很多(我以前做过,但那时真的没有选择)。
如果您的目标不是 3.5,我建议使用 SharpZipLib
。它是一个相当不错的库,即使您正在使用 3.5,也可以考虑使用它。