| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- package main
- import (
- "archive/zip"
- "io"
- "os"
- "path/filepath"
- )
- type ZipWorker struct {
- zipWriter *zip.Writer
- root string
- }
- func NewZipWorker(zipFile io.Writer, root string) *ZipWorker {
- return &ZipWorker{
- zipWriter: zip.NewWriter(zipFile),
- root: root,
- }
- }
- func (worker *ZipWorker) run() error {
- defer worker.close()
- return filepath.Walk(worker.root, worker.zipAllFiles)
- }
- func (worker *ZipWorker) zipAllFiles(path string, info os.FileInfo, err error) error {
- if info.IsDir() {
- return nil
- }
- fileWriter, err := worker.zipWriter.Create(path)
- if err != nil {
- return err
- }
- fileReader, err := os.Open(path)
- if err != nil {
- return err
- }
- _, err = io.Copy(fileWriter, fileReader)
- return err
- }
- func (worker *ZipWorker) close() {
- worker.zipWriter.Close()
- }
- func zipFolder(folder string, file string) error {
- if _, err := os.Stat(file); err == nil {
- os.Remove(file)
- }
- zipFile, err := os.Create(file)
- if err != nil {
- return err
- }
- defer zipFile.Close()
- return NewZipWorker(zipFile, folder).run()
- }
|