国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

Go語言壓縮和解壓縮tar.gz文件的方法

2020-04-01 19:20:30
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Go語言壓縮和解壓縮tar.gz文件的方法,實例分析了使用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語言程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 盐山县| 海丰县| 延吉市| 衡水市| 巴彦县| 皋兰县| 廊坊市| 克拉玛依市| 广灵县| 集贤县| 安溪县| 军事| 绵阳市| 乐安县| 启东市| 平乐县| 渭源县| 西昌市| 南投市| 玉林市| 邵阳市| 洛南县| 天水市| 德庆县| 西和县| 沙雅县| 都江堰市| 绥江县| 禹州市| 怀柔区| 大化| 永顺县| 咸宁市| 平罗县| 商都县| 盘山县| 定日县| 胶南市| 沁源县| 铜梁县| 土默特左旗|