SharpCompress:跨平台的 C# 压缩与解压库

在开发中,处理压缩文件是一个常见的需求。无论是从互联网下载资源、备份数据,还是打包应用程序的输出,压缩和解压功能都扮演着重要的角色。

C#压缩解压文件处理方案

1. 简介

SharpCompress 是一个由 Adam Hathcock 维护的开源 C# 库,提供对多种压缩格式的读写支持。它完全使用 C# 编写,兼容现代 .NET 平台(包括 .NET Standard、.NET Core 和 .NET 5+),适用于 Windows、Linux 和 macOS 系统。

项目地址:https://github.com/adamhathcock/sharpcompress

与其他压缩库相比,SharpCompress 的最大特点是其 广泛支持多种压缩格式,并且可以轻松集成到项目中。此外,它还支持流式处理,适用于大文件或网络传输场景。

2. 支持的压缩格式

SharpCompress 支持以下常见的压缩与归档格式:

  • • ZIP
  • • RAR(含 RAR5)
  • • 7Zip
  • • TAR
  • • GZip
  • • BZip2
  • • LZip
  • • XZ

支持以下格式的 写入:

  • • ZIP
  • • TAR
  • • GZip
  • • BZip2
  • • LZip

对于需要长期归档和流式处理的场景,推荐使用 GZip、BZip2 或 LZip,因其格式简洁且易于流式解析。

3. 安装与引入

通过 NuGet 包管理器安装

Install-Package SharpCompress

引用命名空间即可开始使用

using SharpCompress.Archives;

using SharpCompress.Common;

using System.IO;

4. 基本用法

4.1 解压 ZIP 文件

一个简单的 ZIP 文件解压示例

using (var archive = ArchiveFactory.Open("example.zip"))

{

foreach (var entry in archive.Entries)

{

if (!entry.IsDirectory)

{

entry.WriteToDirectory("output_directory", new ExtractionOptions()

{

ExtractFullPath = true,

Overwrite = true

});

}

}

}

4.2 创建 ZIP 文件

创建 ZIP 文件

using (var archive = ArchiveFactory.CreateWritableArchive(ArchiveType.Zip, File.Create("new_archive.zip")))

{

archive.AddAllFromDirectory("source_directory");

}

4.3 处理 RAR 文件(仅限读取)

由于 RAR 格式是专有格式,SharpCompress 只支持读取 RAR 文件:

using (var archive = ArchiveFactory.Open("example.rar"))

{

foreach (var entry in archive.Entries)

{

if (!entry.IsDirectory)

{

entry.WriteToDirectory("output_directory", new ExtractionOptions()

{

ExtractFullPath = true,

Overwrite = true

});

}

}

}

5. 高级特性

5.1 流式处理

SharpCompress 支持从 Stream 中读取和写入压缩文件,这使得它可以用于网络请求、内存操作等场景

using (var stream = new FileStream("example.zip", FileMode.Open))

using (var archive = ArchiveFactory.Open(stream))

{

// 处理解压逻辑

}

5.2 加密支持

某些压缩格式(如 ZIP)支持加密压缩包。SharpCompress 允许你在打开加密压缩包时提供密码

using (var archive = ArchiveFactory.Open("encrypted.zip", new ReaderOptions { Password = "password" }))

{

// 解压逻辑

}

5.3 自定义提取选项

通过 ExtractionOptions,你可以控制是否覆盖现有文件、是否提取完整路径等。

相关推荐
http阿拉丁神猫5 小时前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
不会就选b6 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
czhc11400756636 小时前
同值短路与单一真值源:属性不是命令,状态只有一个家
c#
Pniubi9 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知10 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工10 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留11 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu11 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国12 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
benchmark_cc13 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash