1 Star 0 Fork 0

清汤兔子面 / tobox

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
zip.go 1.80 KB
一键复制 编辑 原始数据 按行查看 历史
agent_iyyn 提交于 2020-09-25 22:14 . first commit modules.
package zip
import (
"archive/zip"
"io"
"os"
"path/filepath"
"strings"
)
// Zip
func Zip(srcFile string, destZip string) error {
zipFile, err := os.Create(destZip)
if err != nil {
return err
}
defer zipFile.Close()
archive := zip.NewWriter(zipFile)
defer archive.Close()
srcInfo, err := os.Stat(srcFile)
if err != nil {
return err
}
return filepath.Walk(srcFile, func(path string, info os.FileInfo, err error) error {
if err != nil || len(path) == len(srcFile) {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
if srcInfo.IsDir() {
header.Name = strings.TrimPrefix(path, srcFile+"/")
} else {
header.Name = strings.TrimPrefix(path, filepath.Dir(srcFile)+"/")
}
if info.IsDir() {
header.Name += "/"
} else {
header.Method = zip.Deflate
}
writer, err := archive.CreateHeader(header)
if err != nil {
return err
}
if !info.IsDir() {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(writer, file)
}
return err
})
}
// Unzip
func Unzip(zipFile string, destDir string) error {
zipReader, err := zip.OpenReader(zipFile)
if err != nil {
return err
}
defer zipReader.Close()
for _, f := range zipReader.File {
fileName := filepath.Join(destDir, f.Name)
if f.FileInfo().IsDir() {
_ = os.MkdirAll(fileName, os.ModePerm)
} else {
if err = os.MkdirAll(filepath.Dir(fileName), os.ModePerm); err != nil {
return err
}
inFile, err := f.Open()
if err != nil {
return err
}
defer inFile.Close()
outFile, err := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
if err != nil {
return err
}
defer outFile.Close()
_, err = io.Copy(outFile, inFile)
if err != nil {
return err
}
}
}
return nil
}
Go
1
https://gitee.com/agent_iyyn/tobox.git
git@gitee.com:agent_iyyn/tobox.git
agent_iyyn
tobox
tobox
v0.1.2

搜索帮助