golang1.5 tar.gz 打包目录,代码分享
发布时间:2020-12-16 18:33:22 所属栏目:大数据 来源:网络整理
导读:package mainimport ("archive/tar""compress/gzip""fmt""io""io/ioutil""os""strings")func main() {fmt.Println(Gzip(".","1.tar.gz"))}func Gzip(filepath,filename string) error {File,err := os.Create(filename)if err != nil {return err}defer Fi
package main import ( "archive/tar" "compress/gzip" "fmt" "io" "io/ioutil" "os" "strings" ) func main() { fmt.Println(Gzip(".","1.tar.gz")) } func Gzip(filepath,filename string) error { File,err := os.Create(filename) if err != nil { return err } defer File.Close() gw := gzip.NewWriter(File) defer gw.Close() tw := tar.NewWriter(gw) defer tw.Close() return walk(filepath,tw) } func walk(path string,tw *tar.Writer) error { path = strings.Replace(path,"","/",-1) info,err := ioutil.ReadDir(path) if err != nil { return err } if !strings.HasSuffix(path,"/") { path = path + "/" } index := strings.Index(path,"/") list := strings.Join(strings.Split(path,"/")[index:],"/") for _,v := range info { if v.IsDir() { head := tar.Header{Name: list + v.Name(),Typeflag: tar.TypeDir,ModTime: v.ModTime()} tw.WriteHeader(&head) walk(path+v.Name(),tw) continue } F,err := os.Open(path + v.Name()) if err != nil { fmt.Println("打开文件%s失败.",err) continue } head := tar.Header{Name: list + v.Name(),Size: v.Size(),Mode: int64(v.Mode()),ModTime: v.ModTime()} tw.WriteHeader(&head) io.Copy(tw,F) F.Close() } return nil } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |