golang 压缩文件 过滤指定文件的前缀名

该代码示例演示了如何使用Go语言的`archive/zip`包来创建ZIP压缩文件,并在过程中排除指定前缀的文件。函数`ZipFilesPrefixExcept`接受源文件夹路径、目标ZIP文件路径和一个排除文件列表作为参数,通过遍历源文件夹,将不以排除列表中前缀开头的文件添加到ZIP档案中。主函数`main`展示了如何调用这个功能。
摘要由CSDN通过智能技术生成
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 
	}	
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值