Go语言压缩和解压缩tar.gz文件的方法
作者:不吃皮蛋 时间:2024-05-21 10:21:46
本文实例讲述了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语言程序设计有所帮助。
标签:Go语言,压缩,解压
0
投稿
猜你喜欢
pandas-resample按时间聚合实例
2023-05-26 19:07:50
flask循环导入的问题解决
2023-10-01 10:28:52
解决jupyter加载文件失败的问题
2022-07-21 19:17:05
对python添加模块路径的三种方法总结
2023-11-26 04:01:35
使用JS的DOM文档对象模型获取前端循环的参数
2024-04-10 13:54:46
Python的Django框架中自定义模版标签的示例
2022-10-31 22:28:56
Vue解决ajax跨域的问题
2024-04-30 10:19:45
Python logging简介详解
2022-05-12 09:27:02
MySQL左联多表查询where条件写法示例
2024-01-14 08:44:43
基于梯度爆炸的解决方法:clip gradient
2022-07-24 02:19:09
python实现ip代理池功能示例
2023-07-30 16:36:06
SQL Server利用sp_spaceused如何查看表记录存在不准确的情况
2024-01-20 07:40:10
TensorFlow2.0矩阵与向量的加减乘实例
2023-12-30 13:21:00
Python随机数用法实例详解【基于random模块】
2023-10-26 08:48:49
Python实现屏幕代码雨效果的示例代码
2021-08-29 12:48:09
PDO::_construct讲解
2023-06-06 03:22:31
tensorflow实现将ckpt转pb文件的方法
2023-03-24 19:05:05
TensorFLow 数学运算的示例代码
2023-12-13 21:30:16
python通过opencv实现批量剪切图片
2021-05-12 12:50:14
解决Pytorch内存溢出,Ubuntu进程killed的问题
2023-08-31 22:12:16