package main
import (
"path/filepath"
"io"
"os"
"strings"
"archive/zip"
)
func ZipFilesPrefixExcept(srcFile string, destZip string,ExcptFiles []string) error {
zipfile, err := os.Create(destZip)
if err != nil {
return err
}
defer zipfile.Close()
archive := zip.NewWriter(zipfile)
defer archive.Close()
filepath.Walk(srcFile, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
for _,v:=range ExcptFiles{
//检测字符串是否以指定的前缀开头
if strings.HasPrefix(filepath.Base(info.Name()),v){
return nil
}
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
//就是把前缀字符串去掉,剩下的就是需要返回的
header.Name = strings.TrimPrefix(path, filepath.Dir(srcFile) + "/")
// header.Name = path
if info.IsDir() {
header.Name += "/"
} else {
header.Method = zip.Deflate
}
writer, err := archive.CreateHeader(header)
if err != nil {
return err
}
if ! info.IsDir() {
file, errO := os.Open(path)
if errO != nil {
return errO
}
defer file.Close()
_, err = io.Copy(writer, file)
}
return err
})
return err
}
func main() {
ExcptFiles := []string{"z","s", "c","t", "a"}
err := ZipFilesPrefixExcept( "E:/work/go/go_test/","./test.zip",ExcptFiles)
if err != nil {
return
}
}
golang 压缩文件 过滤指定文件的前缀名
最新推荐文章于 2024-03-14 17:34:26 发布
该代码示例演示了如何使用Go语言的`archive/zip`包来创建ZIP压缩文件,并在过程中排除指定前缀的文件。函数`ZipFilesPrefixExcept`接受源文件夹路径、目标ZIP文件路径和一个排除文件列表作为参数,通过遍历源文件夹,将不以排除列表中前缀开头的文件添加到ZIP档案中。主函数`main`展示了如何调用这个功能。
摘要由CSDN通过智能技术生成