go语言生成zip压缩文件

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
}

猜你喜欢

转载自blog.csdn.net/weixin_44282540/article/details/109067235