Created
May 8, 2019 14:54
-
-
Save yeelone/9204cd930316d985b820ec507378b1a1 to your computer and use it in GitHub Desktop.
go打包目录
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 参考的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