You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
openim-sdk-cpp/go/chao-sdk-core/internal/third/zip.go

75 lines
1.4 KiB

package third
import (
"archive/zip"
"io"
"os"
"path/filepath"
)
func (c *Third) addFileToZip(zipWriter *zip.Writer, filename string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
info, err := file.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Name = filepath.Base(filename)
header.Method = zip.Deflate
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, io.LimitReader(file, info.Size()))
return err
}
func zipFiles(zipPath string, files []string) error {
zipFile, err := os.Create(zipPath)
if err != nil {
return err
}
defer zipFile.Close()
zipWriter := zip.NewWriter(zipFile)
defer zipWriter.Close()
addFileToZip := func(fp string) error {
file, err := os.Open(fp)
if err != nil {
return err
}
defer file.Close()
info, err := file.Stat()
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Name = filepath.Base(file.Name())
header.Method = zip.Deflate
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
_, err = io.Copy(writer, io.LimitReader(file, info.Size()))
return err
}
for _, file := range files {
err := addFileToZip(file)
if err != nil {
return err
}
}
if err := zipWriter.Flush(); err != nil {
return err
}
return nil
}