func ZipCsv() bool {
//out_dir 输入路径
//ZIPOutputPath 压缩之后输出的路径
err:=Zip(out_dir,ZIPOutputPath)
if err!=nil{
return false
}
return true
}
func Zip(src_dir string, zip_file_name string) error {
dir, err := ioutil.ReadDir(src_dir)
if err !=nil{
logger.MyLogger.Error("ioutil.ReadDir err:", zap.Error(err))
return err
}
if len(dir) == 0 {
logger.MyLogger.Info(src_dir + " is empty dir!")
return nil
}
// 预防:旧文件无法覆盖
os.RemoveAll(zip_file_name)
// 创建:zip文件
zipfile, _ := os.Create(zip_file_name)
defer zipfile.Close()
// 打开:zip文件
archive := zip.NewWriter(zipfile)
defer archive.Close()
// 遍历路径信息
filepath.Walk(src_dir, func(path string, info os.FileInfo, _ error) error {
// 如果是源路径,提前进行下一个遍历
if path == src_dir {
return nil
}
// 获取:文件头信息
header, _ := zip.FileInfoHeader(info)
header.Name = strings.TrimPrefix(path, src_dir+`\`)
// 判断:文件是不是文件夹
if info.IsDir() {
header.Name += `/`
} else {
// 设置:zip的文件压缩算法
header.Method = zip.Deflate
}
// 创建:压缩包头部信息
writer, _ := archive.CreateHeader(header)
if !info.IsDir() {
file, _ := os.Open(path)
defer file.Close()
io.Copy(writer, file)
}
return nil
})
return nil
}
go语言生成zip压缩文件
猜你喜欢
转载自blog.csdn.net/weixin_44282540/article/details/109067235
今日推荐
周排行