您认为哪种方法是“最佳”。
System.IO.Packaging
命名空间?[我可以针对框架3.5;最好=最容易设计,实施和维护。]
我最感兴趣的是你认为所选方法最好的原因。
答案 0 :(得分:23)
我一直使用SharpZipLib
忘了原因部分:主要是因为它已经存在了很长时间。它有详细记录,并具有直观的API。如果你喜欢这种类型的话,它还是开源的。
答案 1 :(得分:16)
我发现DotNetZip Library是使用zip文件的最简单方法。 SharpZipLib是一个更强大,更灵活的解决方案。
答案 2 :(得分:16)
DotNetZip使用起来非常简单。我喜欢它,因为它是完全管理的 - 不需要shell交互。编程模型比shell更简单,更清晰。它也比SharpZipLib以及.NET 3.0中添加的Packaging类更简单。它是免费的,小型的,积极维护的。
它比一张海报提供的J#选项要好得多 - J#是一个巨大的运行时间和一个巨大的药丸吞下来获得ZIP支持。此外,J#支持正在停止。在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以及自解压档案。它很快。试试吧。
答案 3 :(得分:14)
我意识到这是一个古老的问题,但我只是想我会添加一个更新的答案。如果您使用的是.NET 4.5,则可以使用新的内置ZipFile
class以编程方式将多个文件轻松保存到zip文件夹中。
首先,您需要将文件准备到新文件夹(Directory.CreateDirectory
,File.Move
),然后您只需使用ZipFile.CreateFromDirectory
Method(从链接页面改编) ):
string filePathOfNewFolder = @"c:\example\start";
string zipFilePath = @"c:\example\result.zip";
ZipFile.CreateFromDirectory(filePathOfNewFolder, zipFilePath);
答案 4 :(得分:2)
System.IO.Compression命名空间下的GZipStream和DeflateStream类使得压缩起来非常容易。
更新: 注释正确地说明这些类不允许您操作Zip文件。但是,J#dll包含java.util和java.io名称空间中所需的功能。有关详细信息,请参阅dmihailescu的Code Project article,其中详细介绍了它们的用法并提供了示例代码。
答案 5 :(得分:2)
没有人提到Xceed Zip组件。我以前使用它,它非常适合创建zip文件和压缩数据流。我强烈推荐它,但可能需要许可费用权衡。
答案 6 :(得分:1)
由于您的目标是Framework 3.5,我会选择System.IO.Packaging
。它是专为压缩而设计的库,并附带框架,因此产品甚至不需要额外的DLL。但是,使用示例非常糟糕。
使用shell是不推荐的。首先,它只适用于Windows XP及更高版本。但即使你不关心它,它的陷阱也很多(我以前做过,但只是因为我别无选择)。
如果您没有定位3.5,我会使用SharpZipLib
。这是一个非常好的库,即使你使用的是3.5,你也可以考虑它。
答案 7 :(得分:0)
Ultimate ZIP是一种高性能且可靠的压缩组件,它使您可以轻松地即时创建和处理ZIP,TAR,TGZ,GZ存档,以及浏览.NET中先前创建的存档的内容。跨平台应用程序。它完全是用C#编写的,具有最佳的设计模式和已应用的低级.NET优化,它为.NET应用程序提供了性能,可靠性和可扩展性。该软件包随附了许多代码段以及VB.NET和C#中完整记录的示例,这些示例说明了如何创建,压缩和解压缩存档。