1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-17 16:12:42 +08:00
Files
go-mixed/compress/zip.go
2023-10-12 15:02:04 +08:00

63 lines
963 B
Go

package compress
import (
"archive/zip"
"os"
)
type zipPackage struct {
files []zipFile
}
type zipFile struct {
name string
filename string
}
func NewZip() *zipPackage {
return &zipPackage{}
}
func (z *zipPackage) AddFile(name string, f string) error {
if _, err := os.Stat(f); err != nil {
return err
}
z.files = append(z.files, zipFile{name: name, filename: f})
return nil
}
func (z *zipPackage) WriteToFile(filename string) error {
out, err := os.Create(filename)
if err != nil {
return err
}
defer out.Close()
return z.Write(out)
}
func (z *zipPackage) Write(out *os.File) error {
zipWriter := zip.NewWriter(out)
defer zipWriter.Close()
files := z.files
for _, f := range files {
fileWriter, err := zipWriter.Create(f.name)
if err != nil {
return err
}
in, err := os.ReadFile(f.filename)
if err != nil {
return err
}
if _, err = fileWriter.Write(in); err != nil {
return err
}
}
return nil
}