這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
壓縮檔
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")}