Go语言压缩和解压缩tar.gz文件的方法
作者:不吃皮蛋 发布时间:2024-05-21 10:21:46
标签:Go语言,压缩,解压
本文实例讲述了Go语言压缩和解压缩tar.gz文件的方法。分享给大家供大家参考。具体分析如下:
golang处理压缩包,最常用的就是tar.gz了,这里写了一个测试一下。
压缩文件:
package main
import (
"fmt"
"os"
"io"
"archive/tar"
"compress/gzip"
)
func main() {
// file write
fw, err := os.Create("tar/lin_golang_src.tar.gz")
if err != nil {
panic(err)
}
defer fw.Close()
// gzip write
gw := gzip.NewWriter(fw)
defer gw.Close()
// tar write
tw := tar.NewWriter(gw)
defer tw.Close()
// 打开文件夹
dir, err := os.Open("file/")
if err != nil {
panic(nil)
}
defer dir.Close()
// 读取文件列表
fis, err := dir.Readdir(0)
if err != nil {
panic(err)
}
// 遍历文件列表
for _, fi := range fis {
// 逃过文件夹, 我这里就不递归了
if fi.IsDir() {
continue
}
// 打印文件名称
fmt.Println(fi.Name())
// 打开文件
fr, err := os.Open(dir.Name() + "/" + fi.Name())
if err != nil {
panic(err)
}
defer fr.Close()
// 信息头
h := new(tar.Header)
h.Name = fi.Name()
h.Size = fi.Size()
h.Mode = int64(fi.Mode())
h.ModTime = fi.ModTime()
// 写信息头
err = tw.WriteHeader(h)
if err != nil {
panic(err)
}
// 写文件
_, err = io.Copy(tw, fr)
if err != nil {
panic(err)
}
}
fmt.Println("tar.gz ok")
}
解压文件:
package main
import (
"fmt"
"os"
"io"
// "time"
"archive/tar"
"compress/gzip"
)
func main() {
// file read
fr, err := os.Open("tar/lin_golang_src.tar.gz")
if err != nil {
panic(err)
}
defer fr.Close()
// gzip read
gr, err := gzip.NewReader(fr)
if err != nil {
panic(err)
}
defer gr.Close()
// tar read
tr := tar.NewReader(gr)
// 读取文件
for {
h, err := tr.Next()
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
// 显示文件
fmt.Println(h.Name)
// 打开文件
fw, err := os.OpenFile("file2/" + h.Name, os.O_CREATE | os.O_WRONLY, 0644/*os.FileMode(h.Mode)*/)
if err != nil {
panic(err)
}
defer fw.Close()
// 写文件
_, err = io.Copy(fw, tr)
if err != nil {
panic(err)
}
}
fmt.Println("un tar.gz ok")
}
这样以后打包下载东西的时候就可以使用了。
希望本文所述对大家的Go语言程序设计有所帮助。


猜你喜欢
- 今天在看文档的时候,发现pytorch 的conv操作不是很明白,于是有了一下记录首先提出两个问题:1.输入图片是单通道情况下的filter
- 概述Object.freeze(obj)可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删
- 在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊。从hdf
- Window对象 窗口操作 Window对象对操作浏览器窗口非常有用,开发者可以移动或调整浏览器窗口的大小。可用四种方法实现这些操作: mo
- 一、遇到的问题在向数据库中存入汉字时遇到这样的问题:Cause: java.sql.SQLException: Incorrect stri
- 一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间。之前是能在视频网站上面在线看的,可是自从广电总局的限制令之后,进口的美剧英
- 前言在日常前端开发中, 经常会遇到频繁发起的重复请求, 会给服务器及网络造成不必要的压力, 可通过取消重复请求解决场景订单数据条件筛选查询表
- (一)wxpython的安装 Ubuntu下的安装,还是比较简单的。#使用:apt-cache sear
- 一、创建TensorRT有以下几个步骤:1.用TensorRT中network模块定义网络模型2.调用TensorRT构建器从网络创建优化的
- 在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题
- CREATETABLE`users`(`id`int(10)NOTNULLAUTO_INCREMENT,`name`char(50)NOTN
- 最近公司有一个日文项目,由于之前使用的是自己开发的中文CMS,并没有将语言包分离,在网站建设调试过程中出现了令人头疼的乱码问题。乱码出现的原
- 前言首先来讲一下服务端渲染,直白的说就是在服务端拿数据进行解析渲染,直接生成html片段返回给前端。具体用法也有很多种比如:传统的服务端模板
- 代码如下:CREATE FUNCTION [dbo].[udf_DaysInMonth] ( @Date DATETIME )
- 本文实例讲述了php mysql procedure实现获取多个结果集的方法。分享给大家供大家参考,具体如下:protected funct
- 阅读别人的python源码时碰到了这个yield这个关键字,各种搜索终于搞懂了,在此做一下总结:通常的for...in...循环中,in后面
- 数据库 关键字:为了避免在数据库表结构设计过程中使用系统保留关键字我们必须知道数据库存在哪些关键字,接下来会列出mysql、oracle、s
- 窗口函数形如:表达式 OVER (PARTITION BY 分组字段 ORDER BY 排序字段)有两个能力:当表达式为 rank() de
- 大家都在关注视觉的盛宴,西方的美学;今天就分享下,中国最为古老的美,也是身边随处可见的美学–中国汉字书法之美;古文者,仓颉做造也。仰观奎星园
- 前言一直想好好学习一下Python爬虫,之前断断续续的把Python基础学了一下,悲剧的是学的没有忘的快。只能再次拿出来滤了一遍,趁热打铁,