C# SharpZipLib 压缩与解压文件操作指南
SharpZipLib 是一个由 C# 编写的开源库,支持 ZIP、GZIP、Tar 和 BZIP2 格式的压缩与解压。本文通过具体代码示例,演示如何使用 ZipFile 和 FastZip 类实现文件的批量压缩、单个文件管理以及目录解压等核心功能。
准备工作
SharpZipLib 的官方仓库为 icsharpcode/SharpZipLib。使用前需要将下载的 ICSharpCode.SharpZipLib.dll 引用到 C# 项目中。
常见压缩解压操作
第1步:创建新的 ZIP 文件并添加文件
通过 ZipFile.Create 创建新包,并使用 BeginUpdate 开启编辑模式,添加完成后调用 CommitUpdate 保存更改。
using (ZipFile zip = ZipFile.Create(@"E:\\test.zip"))
{
zip.BeginUpdate();
zip.Add(@"E:\\文件1.txt");
zip.Add(@"E:\\文件2.txt");
zip.CommitUpdate();
}
第2步:将整个文件夹递归压缩
使用 FastZip 类的 CreateZip 方法可以一键将目录打包。该方法的第三个布尔参数控制是否递归子目录,第四个参数为正则表达式过滤规则(空字符串表示不过滤)。
(new FastZip()).CreateZip(@"E:\\test.zip", @"E:\\test\\", true, "");
注:FastZip.CreateZip 提供多个重载版本,可根据需要传入目录过滤或文件过滤参数。
第3步:向已有 ZIP 包中添加文件
先以读写模式打开现有 ZIP 文件,进入更新模式后添加目标文件,最后提交更新。
using (ZipFile zip = new ZipFile(@"E:\\test.zip"))
{
zip.BeginUpdate();
zip.Add(@"E:\\test.doc");
zip.CommitUpdate();
}
第4步:列出 ZIP 包内所有条目
迭代 ZipFile 对象即可遍历其中的 ZipEntry,获取文件名等元数据信息。
using (ZipFile zip = new ZipFile(@"E:\\test.zip"))
{
string list = string.Empty;
foreach (ZipEntry entry in zip)
{
list += entry.Name + "\r\n";
}
MessageBox.Show(list);
}
第5步:从 ZIP 包中删除文件
在更新模式下调用 Delete 方法移除指定条目。注意 Delete 参数通常指代条目名称,需与实际包内名称匹配。
using (ZipFile zip = new ZipFile(@"E:\\test.zip"))
{
zip.BeginUpdate();
zip.Delete("test.doc");
zip.Delete("test22.txt");
zip.CommitUpdate();
}
第6步:解压 ZIP 到指定目录
使用 FastZip.ExtractZip 可快速解压整个压缩包至目标路径。
(new FastZip()).ExtractZip(@"E:\\test.zip", @"E:\\test\\", "");
核心类与流操作简介
除了基于文件路径的高层封装,SharpZipLib 还提供了面向流的操作类:
- 解压缩类:
ZipInputStream用于处理 Deflate 格式流,GZipInputStream用于处理 GZip 格式流。 - 压缩类:
ZipOutputStream和GZipOutputStream分别用于写入 Deflate 和 GZip 压缩数据。 - 辅助类:
StreamUtil提供了常用 Stream 处理方法,如Copy(流间复制数据)和ReadFully(读取流中所有字节)。
以上就是 SharpZipLib 在 C# 中进行文件压缩与解压的详细内容,更多关于 C# 开发技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









