文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

golang中tar压缩和解压文件详情

2024-04-02 19:55

关注

查看官方文档,官方自带的演示:


// 官方演示
package main
 
import (
    "archive/tar"
    "bytes"
    "fmt"
    "io"
    "log"
    "os"
)
 
func main() {
    // 将若干文件写入压缩文档
    // 这边源文件是直接写在代码里哈,然后也没有输出一个文档
    // 后面会演示源文件进行压缩,然后输出一个tar.gz的压缩文档
    var buf bytes.Buffer
    tw := tar.NewWriter(&buf)
    var files = []struct {
        Name, Body string
    }{
        {"readme.txt", "This archive contains some text files."},
        {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
        {"todo.txt", "Get animal handling license."},
    }
    for _, file := range files {
        hdr := &tar.Header{
            Name: file.Name,
            Mode: 0600,
            Size: int64(len(file.Body)),
        }
        if err := tw.WriteHeader(hdr); err != nil {
            log.Fatal(err)
        }
        if _, err := tw.Write([]byte(file.Body)); err != nil {
            log.Fatal(err)
        }
    }
    if err := tw.Close(); err != nil {
        log.Fatal(err)
    }
 
    // 上面压缩了之后,压缩内容都存储在buf这个变量里
    // 这边遍历输出一下即可
    tr := tar.NewReader(&buf)
    for {
        hdr, err := tr.Next()
        if err == io.EOF {
            break // 文件已经遍历完成了
        }
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%s的文件内容: ", hdr.Name)
        if _, err := io.Copy(os.Stdout, tr); err != nil {
            log.Fatal(err)
        }
        fmt.Println()
    }
 
}


1、压缩并输出tar.gz文档

官方的演示中并未将压缩的内容输出文档,实际使用中经常会用到。这边可用os库中的文件操作,将压缩内容写入文档,参考

代码如下:


// tar压缩
// 这边演示一下从源文件进行压缩,然后输出一个tar.gz文档
// 作者:陈杰斌
// 参考地址:http://www.01happy.com/golang-tar/
package main
 
import (
    "archive/tar"
    "bytes"
    "log"
    "os"
)
 
func main() {
    // 创建一个缓冲区用来保存压缩文件内容
    var buf bytes.Buffer
    // 创建一个压缩文档
    tw := tar.NewWriter(&buf)
 
    // 定义一堆文件
    // 将文件写入到压缩文档tw
    var files = []struct {
        Name, Body string
    }{
        {"readme.txt", "This archive contains some text files."},
        {"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
        {"todo.txt", "Get animal handling license."},
    }
    for _, file := range files {
        hdr := &tar.Header{
            Name: file.Name,
            Mode: 0600,
            Size: int64(len(file.Body)),
        }
        if err := tw.WriteHeader(hdr); err != nil {
            log.Fatal(err)
        }
        if _, err := tw.Write([]byte(file.Body)); err != nil {
            log.Fatal(err)
        }
    }
    if err := tw.Close(); err != nil {
        log.Fatal(err)
    }
 
    // 将压缩文档内容写入文件 file.tar.gz
    f, err := os.OpenFile("file.tar.gz", os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        log.Fatal(err)
    }
    buf.WriteTo(f)
}


执行一下哈:


> go run compress.go 


golang中tar压缩:

2、tar解压缩

同上,可以使用os库将文档内容读入


// tar解压缩演示
// 这边演示一下从源文件进行解压,然后输出文件内容
// 作者:陈杰斌
// 参考地址:http://www.01happy.com/golang-tar/
package main
 
import (
    "archive/tar"
    "fmt"
    "io"
    "log"
    "os"
)
 
func main() {
    // 解压需要使用tar.NewReader方法, 这个方法接收一个io.Reader对象
    // 那边怎么从源文件得到io.Reader对象呢?
    // 这边通过os.Open打开文件,会得到一个os.File对象,
    // 因为他实现了io.Reader的Read方法,所有可以直接传递给tar.NewReader
    file, err := os.Open("file.tar.gz")
    if err != nil {
        log.Fatalln(err)
    }
    defer file.Close()
 
    // tar对象读取文件内容, 遍历输出文件内容
    tr := tar.NewReader(file)
    for {
        hdr, err := tr.Next()
        if err == io.EOF {
            break // End of archive
        }
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("%s文件内容:\n", hdr.Name)
        if _, err := io.Copy(os.Stdout, tr); err != nil {
            log.Fatal(err)
        }
        fmt.Println()
    }
}


执行一下:


 > go run decompress.go  


golang中tar解压:

到此这篇关于golang中tar压缩和解压文件详情的文章就介绍到这了,更多相关golang中tar压缩和解压文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯