Go 创建带密码的zip压缩包

创建带密码的zip压缩包

package main
import (
"io"
"io/fs"
"log"
"os"
"path/filepath"
"strings"
"github.com/alexmullins/zip"
)
func init() {
log.SetFlags(log.Lshortfile | log.LstdFlags)
}
func compresses(source, destination string, password string) error {
zipFile, err := os.Create(destination)
if err != nil {
return err
}
defer zipFile.Close()
zipWriter := zip.NewWriter(zipFile)
defer zipWriter.Close()
return filepath.Walk(source, func(path string, info fs.FileInfo, err error) error {
if err != nil {
return err
}
if info.IsDir() {
return nil
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
relativePath := strings.TrimPrefix(path, filepath.Dir(source)+"/")
header.Name = relativePath // 以相对路径保存到压缩包中
header.Method = zip.Deflate
header.Flags = 0x800 // 设置文件名称编码为UTF-8, 避免在Windows上解压后出现文件名乱码的问题
header.SetPassword(password) // 设置解压密码
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
if _, err := io.Copy(writer, file); err != nil {
return err
}
return nil
})
}
func main() {
if err := compresses("./dir", "./dir.zip", "Passw0rd"); err != nil {
log.Fatalln(err)
}
}
posted @   liy36  阅读(133)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示