func ZipFolder3(src, dest string) error {
// 创建目标ZIP文件
zipFile, err := os.Create(dest)
if err != nil {
return err
}
defer zipFile.Close()
// 创建一个ZIP writer
zipWriter := zip.NewWriter(zipFile)
defer zipWriter.Close()
// 遍历源文件夹及其子目录并添加文件到ZIP
err = filepath.Walk(src, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// 获取文件的相对路径
relPath, err := filepath.Rel(src, path)
if err != nil {
return err
}
// 创建一个新的ZIP文件头
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Name = filepath.ToSlash(relPath)
// 如果是目录,需要在名称后添加"/"以便在ZIP中表示为目录
if info.IsDir() {
header.Name += "/"
}
// 将文件头添加到ZIP中
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
// 如果是目录,不需要写入内容
if info.IsDir() {
return nil
}
// 打开源文件并将其内容复制到ZIP中
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(writer, file)
return err
})
return err
}
压缩文件夹的方法
最新推荐文章于 2024-08-07 16:20:51 发布