在 Golang 中,可以使用 “archive/zip” 包来压缩文件夹为 zip 格式。
以下是一个示例程序:
package main
import (
"archive/zip"
"fmt"
"io"
"os"
"path/filepath"
)
func main() {
dir := "/path/to/folder"
zipFile, err := os.Create("folder.zip")
if err != nil {
fmt.Println(err)
return
}
defer zipFile.Close()
zipWriter := zip.NewWriter(zipFile)
defer zipWriter.Close()
filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Name = path[len(dir)+1:]
if info.IsDir() {
header.Name += "/"
} else {
header.Method = zip.Deflate
}
writer, err := zipWriter.CreateHeader(header)
if err != nil {
return err
}
if !info.IsDir() {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(writer, file)
if err != nil {
return err
}
}
return nil
})
fmt.Println("Folder compressed successfully.")
}
该程序将指定的文件夹压缩为 zip 格式,并将其保存到名为 “folder.zip” 的文件中。在程序中,我们使用了 “filepath.Walk” 函数递归遍历文件夹中的所有文件和子文件夹,然后将它们添加到 zipWriter 中。在添加每个文件之前,我们使用 “zip.FileInfoHeader” 函数创建一个新的文件头,然后将其写入到 zip 文件中。如果当前文件是一个目录,则我们只需要将其名称作为目录条目的名称添加到 zipWriter 中即可。如果当前文件是一个普通文件,则我们需要使用 “os.Open” 打开文件,然后使用 “io.Copy” 将其内容复制到 zipWriter 中。
最后,我们使用 fmt.Println 函数输出 “Folder compressed successfully.” 来表示程序已成功完成压缩过程。