|
@@ -1,6 +1,7 @@
|
|
|
package util
|
|
|
|
|
|
import (
|
|
|
+ "archive/zip"
|
|
|
"fmt"
|
|
|
"io"
|
|
|
"io/fs"
|
|
@@ -260,3 +261,47 @@ func WriteStringToFile(content string, filePath string) {
|
|
|
}
|
|
|
fmt.Println("字符串成功写入文件(os包)")
|
|
|
}
|
|
|
+
|
|
|
+// 压缩文件夹
|
|
|
+func AddDirToZip(dirPath string, zipWriter *zip.Writer) error {
|
|
|
+ filepath.Walk(dirPath, func(path string, info os.FileInfo, err error) error {
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ if info.IsDir() {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+
|
|
|
+ file, err := os.Open(path)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ defer file.Close()
|
|
|
+
|
|
|
+ // 处理路径,确保保留相对路径结构
|
|
|
+ relPath, err := filepath.Rel(dirPath, path)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ header, err := zip.FileInfoHeader(info)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ header.Name = filepath.ToSlash(relPath)
|
|
|
+
|
|
|
+ writer, err := zipWriter.CreateHeader(header)
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ if _, err := io.Copy(writer, file); err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+
|
|
|
+ return nil
|
|
|
+ })
|
|
|
+
|
|
|
+ return nil
|
|
|
+}
|