Files
PandaX/kit/file/zipfiles.go
lixxxww 731f8224b0 优化kit/zip
Signed-off-by: lixxxww <941403820@qq.com>
2024-01-23 11:31:44 +00:00

61 lines
1013 B
Go

package utilFile
import (
"archive/zip"
"io"
"os"
"strings"
)
func ZipFiles(filename string, files []string, oldForm, newForm string) error {
newZipFile, err := os.Create(filename)
if err != nil {
return err
}
defer newZipFile.Close()
zipWriter := zip.NewWriter(newZipFile)
defer zipWriter.Close()
for _, file := range files {
err = compressFile(file, oldForm, newForm, zipWriter)
if err != nil {
return err
}
}
return nil
}
func compressFile(file, oldForm, newForm string, zipWriter *zip.Writer) error {
zipFile, err := os.Open(file)
if err != nil {
return err
}
defer zipFile.Close()
info, err := zipFile.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Name = strings.Replace(file, oldForm, newForm, -1)
header.Method = zip.Deflate
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, zipFile)
if err != nil {
return err
}
return nil
}