生成压缩包

zip

package lib

import (
	"archive/zip"
	ezip "github.com/alexmullins/zip"
	"github.com/cilidm/toolbox/str"
	"io"
	"os"
	"path/filepath"
	"runtime"
	"strings"
)

func EncryptZip(src, dst, passwd string, blackFile []string) error {
	zipfile, err := os.Create(dst)
	if err != nil {
		return err
	}
	defer zipfile.Close()
	archive := ezip.NewWriter(zipfile)
	defer archive.Close()
	filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if runtime.GOOS == "windows" {
			src = strings.ReplaceAll(src, "\\", "/")
			path = strings.ReplaceAll(path, "\\", "/")
		}
		if str.IsContain(blackFile, info.Name()) {
			return nil
		}
		header, err := ezip.FileInfoHeader(info)
		if err != nil {
			return err
		}
		header.Name = strings.ReplaceAll(path, src, "")
		if info.IsDir() {
			header.Name += "/"
		} else {
			header.Method = zip.Deflate
		}
		// 设置密码
		header.SetPassword(passwd)
		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
	})
	return err
}

unzip

go mod

最后更新于