你认为哪种方法是"最好的".
使用System.IO.Packaging
命名空间?
使用与Shell的互操作?
.NET的第三方库?
与开源非托管DLL互操作?
[我可以针对框架3.5; 最好=最容易设计,实施和维护.
我最感兴趣的是你认为所选方法最好的原因.
我一直使用SharpZipLib
忘了原因部分:主要是因为它已经存在了很长时间.它有详细记录,并具有直观的API.如果你是那种类型的东西,它还是开源的.
我发现DotNetZip库是使用zip文件的最简单方法.SharpZipLib是一个功能更强大,更灵活的解决方案.
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以及自解压档案.它很快.试试吧.
我意识到这是一个古老的问题,但我只是想我会添加一个更新的答案.如果您使用的是.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);