C# SharpZipLib 压缩与解压文件操作指南

江岸
江岸
发布时间:2026-10-15 | 5人浏览过
原创

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# 开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表