golang zip压缩
时间: 2023-08-23 22:08:23 浏览: 191
在Golang中,可以使用`archive/zip`包来进行zip压缩。下面是一个简单的示例代码,演示如何使用该包进行文件或目录的压缩:
```go
package main
import (
"archive/zip"
"fmt"
"io"
"os"
"path/filepath"
)
func main() {
// 要压缩的文件或目录路径
source := "/path/to/source"
// 压缩后的zip文件路径
destination := "/path/to/destination.zip"
err := zipFiles(destination, source)
if err != nil {
fmt.Println(err)
} else {
fmt.Println("压缩完成!")
}
}
func zipFiles(destination string, source string) error {
// 创建一个新的zip文件
zipFile, err := os.Create(destination)
if err != nil {
return err
}
defer zipFile.Close()
// 创建zip.Writer,用于向zip文件中写入数据
archive := zip.NewWriter(zipFile)
defer archive.Close()
// 递归遍历源路径下的所有文件和目录
filepath.Walk(source, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// 获取源路径下的相对路径,用于在zip文件中创建相应的目录结构
relativePath, err := filepath.Rel(source, path)
if err != nil {
return err
}
// 创建一个新的文件或目录头部
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
// 设置头部的名称为相对路径
header.Name = relativePath
if info.IsDir() {
// 如果是目录,则写入一个目录头部到zip文件中
header.Name += "/"
header.Method = zip.Store
} else {
// 如果是文件,则写入文件内容到zip文件中
header.Method = zip.Deflate
}
// 创建一个新的文件或目录条目,写入zip.Writer中
writer, err := archive.CreateHeader(header)
if err != nil {
return err
}
if !info.IsDir() {
// 如果是文件,则打开源文件并将内容复制到zip文件中
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
})
return nil
}
```
你可以将`source`和`destination`变量替换为你希望的路径,然后运行代码即可实现压缩。请确保你拥有对源文件或目录的读取权限,并且目标路径是一个有效的zip文件路径。
阅读全文