.NET 3.5中是否有内置的zip库?
如果没有,有哪些流行的开源.net zip库。
编辑说明:请查看评论中的说明 - SharpZipLib现在已经不再维护,您可能希望避免使用它。
开源:#ZipLib
我认为System.IO.Compression
命名空间中的类对于压缩/解压缩单个数据流已经足够了,但是框架本身没有内置用于处理实际zip文件的功能。
编辑说明:正如Ants答案中所指出的那样,有System.IO.Packaging.ZipPackage,但看起来这确实是为WPF设计的,对于一般的zip文件处理来说并不方便。不过值得探究。我之前还不知道它... 绝对值得研究。
没有内置库可用,但有一些开源选项。
DotNetZip 是其中之一。它简单易用且具备很好的功能:AES加密、普通加密、流、ZIP64、文件注释、Unicode、进度事件等等。而且它是免费且开源的。
以下是一些示例代码。
// extract all Photoshop files larger than 100mb
using (ZipFile zip1 = ZipFile.Read(ZipFileName))
{
var LargePhotoShopFiles = zip1.SelectEntries("name = *.psd and size > 100mb");
foreach (ZipEntry e in LargePhotoShopFiles)
{
if (e.UsesEncryption)
e.ExtractWithPassword("unpackDirectory", "VerySecret!");
else
e.Extract("unpackDirectory");
}
}
请查看 System.IO.Packaging.ZipPackage 类。
7Zip可以帮助你,而且它支持多种语言。
我也会推荐http://www.7-zip.org/sdk.html LZMA SDK,但它不是ZIP格式。
System.IO.Compression.DeflateStream
。 public static void UnZip(string zipFile, string folderPath)
{
if (!File.Exists(zipFile))
throw new FileNotFoundException();
if (!Directory.Exists(folderPath))
Directory.CreateDirectory(folderPath);
var t = Type.GetTypeFromProgID("Shell.Application");
dynamic shellApplication = Activator.CreateInstance(t);
dynamic destinationFolder = shellApplication.NameSpace(folderPath);
dynamic sourceFile = shellApplication.NameSpace(zipFile);
foreach (var file in sourceFile.Items())
{
destinationFolder.CopyHere(file, 4 | 16);
}
}
ZipPackage
会有什么不方便之处。你只需要一个允许将文件添加到 zip 并从 zip 中检索的库即可。你可能需要多复杂呢?此外,你能详细说明一下为什么它看起来是为 WPF 设计的吗? - The Muffin ManZipPackage
相对于那些要求——关系、部件等等——确实是复杂的。它是一个更大的打包框架的一部分。至于与WPF的关系——这主要是基于WindowsBase.dll
中还有什么其他内容,其中大部分似乎与WPF相关。 - Jon Skeet