[轉]golang壓縮加壓

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

壓縮檔

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")}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.