bedrocktool/utils/zip.go

62 lines
1.3 KiB
Go
Raw Permalink Normal View History

2022-09-04 14:26:32 +00:00
package utils
import (
"archive/zip"
2023-03-30 11:48:03 +00:00
"compress/flate"
2022-09-04 14:26:32 +00:00
"io"
"io/fs"
"os"
"path"
"path/filepath"
2023-01-27 12:07:53 +00:00
"strings"
2023-03-11 18:50:13 +00:00
"github.com/sirupsen/logrus"
2022-09-04 14:26:32 +00:00
)
2023-01-29 21:20:13 +00:00
func UnpackZip(r io.ReaderAt, size int64, unpackFolder string) {
2022-09-04 14:26:32 +00:00
zr, _ := zip.NewReader(r, size)
2023-01-29 21:20:13 +00:00
for _, srcFile := range zr.File {
srcName := strings.ReplaceAll(srcFile.Name, "\\", "/")
outPath := path.Join(unpackFolder, srcName)
if srcFile.Mode().IsDir() {
os.Mkdir(outPath, 0o755)
2022-09-04 14:26:32 +00:00
} else {
2023-01-29 21:20:13 +00:00
os.MkdirAll(path.Dir(outPath), 0o755)
fr, _ := srcFile.Open()
f, _ := os.Create(path.Join(unpackFolder, srcName))
2022-09-04 14:26:32 +00:00
io.Copy(f, fr)
2023-03-19 22:34:35 +00:00
f.Close()
fr.Close()
2022-09-04 14:26:32 +00:00
}
}
}
func ZipFolder(filename, folder string) error {
f, err := os.Create(filename)
if err != nil {
2023-03-11 18:50:13 +00:00
logrus.Fatal(err)
2022-09-04 14:26:32 +00:00
}
zw := zip.NewWriter(f)
2023-03-30 11:48:03 +00:00
// Register a custom Deflate compressor.
zw.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) {
return flate.NewWriter(out, flate.NoCompression)
})
2022-09-04 14:26:32 +00:00
err = filepath.WalkDir(folder, func(path string, d fs.DirEntry, err error) error {
if !d.Type().IsDir() {
rel := path[len(folder)+1:]
zwf, _ := zw.Create(rel)
data, err := os.ReadFile(path)
if err != nil {
2023-03-11 18:50:13 +00:00
logrus.Error(err)
2022-09-04 14:26:32 +00:00
}
zwf.Write(data)
}
return nil
})
zw.Close()
f.Close()
return err
}