代碼實例:
package main
import (
"archive/zip"
"io"
"os"
"path/filepath"
"strings"
)
func main() {
Zip(`C:\打包的路徑`, `.zip`)
}
// 打包成zip文件
func Zip(src_dir string, zip_file_name string) {
// 預(yù)防:舊文件無法覆蓋
os.RemoveAll(zip_file_name)
// 創(chuàng)建:zip文件
zipfile, _ := os.Create(zip_file_name)
defer zipfile.Close()
// 打開:zip文件
archive := zip.NewWriter(zipfile)
defer archive.Close()
// 遍歷路徑信息
filepath.Walk(src_dir, func(path string, info os.FileInfo, _ error) error {
// 如果是源路徑,提前進行下一個遍歷
if path == src_dir {
return nil
}
// 獲取:文件頭信息
header, _ := zip.FileInfoHeader(info)
header.Name = strings.TrimPrefix(path, src_dir+`\`)
// 判斷:文件是不是文件夾
if info.IsDir() {
header.Name += `/`
} else {
// 設(shè)置:zip的文件壓縮算法
header.Method = zip.Deflate
}
// 創(chuàng)建:壓縮包頭部信息
writer, _ := archive.CreateHeader(header)
if !info.IsDir() {
file, _ := os.Open(path)
defer file.Close()
io.Copy(writer, file)
}
return nil
})
}