Skip to content

Instantly share code, notes, and snippets.

@yeelone
Created May 8, 2019 14:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yeelone/9204cd930316d985b820ec507378b1a1 to your computer and use it in GitHub Desktop.
Save yeelone/9204cd930316d985b820ec507378b1a1 to your computer and use it in GitHub Desktop.
go打包目录
// 参考的https://blog.csdn.net/u011304970/article/details/71131592 ,但原代码有点小BUG,做了点修改。留存这里备忘。
package main
import (
"archive/zip"
"io"
"log"
"os"
"path/filepath"
)
func zipDir(dir string, zipFile string, files []string) {
fz, err := os.Create(zipFile)
if err != nil {
log.Fatalf("Create zip file failed: %s\n", err.Error())
}
defer fz.Close()
w := zip.NewWriter(fz)
defer w.Close()
for _, f := range files {
fDest, err := w.Create(f)
if err != nil {
log.Printf("Create failed: %s\n", err.Error())
continue
}
fSrc, err := os.Open(f)
if err != nil {
log.Printf("Open failed: %s\n", err.Error())
continue
}
defer fSrc.Close()
_, err = io.Copy(fDest, fSrc)
if err != nil {
log.Printf("Copy failed: %s\n", err.Error())
continue
}
}
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
fDest, err := w.Create(path)
if err != nil {
log.Printf("Create failed: %s\n", err.Error())
return nil
}
fSrc, err := os.Open(path)
if err != nil {
log.Printf("Open failed: %s\n", err.Error())
return nil
}
defer fSrc.Close()
_, err = io.Copy(fDest, fSrc)
if err != nil {
log.Printf("Copy failed: %s\n", err.Error())
return nil
}
}
return nil
})
}
func unzipDir(zipFile string, dir string) {
r, err := zip.OpenReader(zipFile)
if err != nil {
log.Fatalf("Open zip file failed: %s\n", err.Error())
}
defer r.Close()
for _, f := range r.File {
func() {
path := dir + string(filepath.Separator) + f.Name
os.MkdirAll(filepath.Dir(path), 0755)
fDest, err := os.Create(path)
if err != nil {
log.Printf("Create failed: %s\n", err.Error())
return
}
defer fDest.Close()
fSrc, err := f.Open()
if err != nil {
log.Printf("Open failed: %s\n", err.Error())
return
}
defer fSrc.Close()
_, err = io.Copy(fDest, fSrc)
if err != nil {
log.Printf("Copy failed: %s\n", err.Error())
return
}
}()
}
}
func main() {
files := []string{"./main.go"}
zipDir("./tar", "test.zip", files)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment