首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >dotnet 简单解压缩 tar gz 到文件夹

dotnet 简单解压缩 tar gz 到文件夹

作者头像
林德熙
发布2025-07-03 15:00:25
发布2025-07-03 15:00:25
14500
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

本文将和大家介绍如何在 dotnet 7 或更高版本里,使用不到 10 行可执行代码解压缩 tar.gz 压缩包到文件夹

从 dot.net 官网下载的 linux 系列的 dotnet 运行时包都是 tar.gz 格式的,如 dotnet-runtime-8.0.17-linux-x64.tar.gz 文件。这样的文件在 Windows 下是比较不友好的,不能一次性解压缩。好在 dotnet 7 添加了 System.Formats.Tar 命名空间,支持了 tar 格式

假定拿到了 E:\download\dotnet-runtime-8.0.17-linux-x64.tar.gz 文件,准备将其解压缩到 CahohuneaFaidinalnalfaji 文件夹,则解压缩的代码如下

代码语言:javascript
代码运行次数:0
运行
复制
using System.Formats.Tar;
using System.IO.Compression;

var file = @"E:\download\dotnet-runtime-8.0.17-linux-x64.tar.gz";

var output = Path.Join(AppContext.BaseDirectory, "CahohuneaFaidinalnalfaji");
Directory.CreateDirectory(output);
using var fileStream = File.OpenRead(file);

using var gZipStream = new GZipStream(fileStream, CompressionMode.Decompress);
TarFile.ExtractToDirectory(gZipStream, output, overwriteFiles: true);

以上代码的核心是先采用 GZipStream 对输入的 tar.gz 文件进行解压缩,再采用 TarFile 将解压缩之后的内容写入到传入的文件夹里面

如上面代码所示,不到 10 行可执行代码,就可以完成从 tar.gz 压缩文件里读取数据,解压缩到输出文件夹

有一些伙伴也许会错误地使用 TarFile 辅助类直接解压缩 tar.gz 文件,如以下错误示例所示

代码语言:javascript
代码运行次数:0
运行
复制
var file = @"E:\download\dotnet-runtime-8.0.17-linux-x64.tar.gz";

var output = Path.Join(AppContext.BaseDirectory, "CahohuneaFaidinalnalfaji");
// System.IO.InvalidDataException:“Unable to parse number.”
TarFile.ExtractToDirectory(file, output, overwriteFiles: true);

以上代码将会遇到 System.IO.InvalidDataException:“Unable to parse number.” 错误,因为 tar.gz 文件不是 tar 文件哦。这里是包含了两层打包过程,第一层是 tar 层,将疏松文件夹组织成一个 tar 格式文件。第二层是将 tar 格式文件采用 gz 压缩。这就是为什么直接使用 TarFile 解压缩 tar.gz 会错误的原因,因为 tar.gz 压根就不是 tar 格式,而是 gz 格式的。必须采用 GZipStream 解压缩之后才能给 TarFile 使用

本文代码放在 githubgitee 上,可以使用如下命令行拉取代码。我整个代码仓库比较庞大,使用以下命令行可以进行部分拉取,拉取速度比较快

先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

代码语言:javascript
代码运行次数:0
运行
复制
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin cd6a31199f243a9f5410688492931c9d93d6ab40

以上使用的是国内的 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码,将 gitee 源换成 github 源进行拉取代码。如果依然拉取不到代码,可以发邮件向我要代码

代码语言:javascript
代码运行次数:0
运行
复制
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin cd6a31199f243a9f5410688492931c9d93d6ab40

获取代码之后,进入 Workbench/RefaikiwairlurWhanaikeeleda 文件夹,即可获取到源代码

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档