压缩文件
packagemain import( "fmt" "os" "io" "archive/tar" "compress/gzip" ) funcmain(){ //filewrite fw,err:=os.Create("tar/lin_golang_src.tar.gz") iferr!=nil{ panic(err) } deferfw.Close() //gzipwrite gw:=gzip.NewWriter(fw) defergw.Close() //tarwrite tw:=tar.NewWriter(gw) defertw.Close() //打开文件夹 dir,err:=os.Open("file/") iferr!=nil{ panic(nil) } deferdir.Close() //读取文件列表 fis,err:=dir.Readdir(0) iferr!=nil{ panic(err) } //遍历文件列表 for_,fi:=rangefis{ //逃过文件夹,我这里就不递归了 iffi.IsDir(){ continue } //打印文件名称 fmt.Println(fi.Name()) //打开文件 fr,err:=os.Open(dir.Name()+"/"+fi.Name()) iferr!=nil{ panic(err) } deferfr.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) iferr!=nil{ panic(err) } //写文件 _,err=io.Copy(tw,fr) iferr!=nil{ panic(err) } } fmt.Println("tar.gzok") }
解压缩文件
packagemain import( "fmt" "os" "io" //"time" "archive/tar" "compress/gzip" ) funcmain(){ //fileread fr,err:=os.Open("tar/lin_golang_src.tar.gz") iferr!=nil{ panic(err) } deferfr.Close() //gzipread gr,err:=gzip.NewReader(fr) iferr!=nil{ panic(err) } defergr.Close() //tarread tr:=tar.NewReader(gr) //读取文件 for{ h,err:=tr.Next() iferr==io.EOF{ break } iferr!=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)*/) iferr!=nil{ panic(err) } deferfw.Close() //写文件 _,err=io.Copy(fw,tr) iferr!=nil{ panic(err) } } fmt.Println("untar.gzok") }原文链接:https://www.f2er.com/go/191100.html