75 lines
1.3 KiB
Go
75 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"archive/zip"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// zip优缺点
|
|
|
|
|
|
func main() {
|
|
// 需要压缩的文件路径
|
|
fileToZip := "test.txt"
|
|
// 压缩后的文件名
|
|
zipFileName := "test.zip"
|
|
|
|
// 创建一个新的zip文件
|
|
zipFile, err := os.Create(zipFileName)
|
|
if err != nil {
|
|
fmt.Println("创建zip文件失败:", err)
|
|
return
|
|
}
|
|
defer zipFile.Close()
|
|
|
|
// 使用zip.Writer将文件写入到zip文件中
|
|
zipWriter := zip.NewWriter(zipFile)
|
|
defer zipWriter.Close()
|
|
|
|
// 添加文件到zip文件中
|
|
err = addFileToZip(fileToZip, zipWriter)
|
|
if err != nil {
|
|
fmt.Println("添加文件到zip失败:", err)
|
|
return
|
|
}
|
|
|
|
fmt.Println("文件压缩成功")
|
|
}
|
|
|
|
func addFileToZip(filePath string, zipWriter *zip.Writer) error {
|
|
// 打开需要压缩的文件
|
|
fileToZip, err := os.Open(filePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer fileToZip.Close()
|
|
|
|
// 获取文件信息
|
|
fileInfo, err := fileToZip.Stat()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 将文件添加到zip文件中
|
|
fileHeader, err := zip.FileInfoHeader(fileInfo)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fileHeader.Name = filepath.Base(filePath)
|
|
writer, err := zipWriter.CreateHeader(fileHeader)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = io.Copy(writer, fileToZip)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|