兄弟连区块链培训分享Go语言压缩与解压

兄弟连区块链培训 · · 567 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  2018年第一季度,区块链相关人才的招聘需求已达到2017年同期的9.7倍,发布区块链相关岗位的公司数量同比增长4.6倍。


  兄弟连教育Go全栈与区块链培训课程是由清华、微软和谷歌名师历时半年时间研发出的独一无二的体系化课程。

压缩文件

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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

567 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传