■实例说明
对于一些大的文件或目录,对其进行压缩是个好的办法。
1)将文件或目录压缩成zip文件
■实例代码
[Golang] 纯文本查看 复制代码 package main
import (
"archive/zip"
"fmt"
"io"
"os"
"path/filepath"
)
// ZipFile 压缩文件
func ZipFile(srcFile, destFile string) error {
// 创建目标文件,即zip文件
zipFile, err := os.Create(destFile)
if err != nil {
return err
}
defer zipFile.Close()
// 创建writer,准备向目标文件中写入数据
writer := zip.NewWriter(zipFile)
defer writer.Close()
// 遍历文件(如果srcFile是个目录的话)
err = filepath.Walk(srcFile, func(path string, info os.FileInfo, err error) error {
// 遍历发生错误,退出
if err != nil {
return err
}
// 创建zip文件信息头
header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}
header.Name = path
if info.IsDir() {
header.Name += "/"
} else {
header.Method = zip.Deflate
}
// 将信息头写入到writer中
writer, err := writer.CreateHeader(header)
if err != nil {
return err
}
// 如果是目录,直接写个头就可以了,filepath.Walk会继续遍历目录
if info.IsDir() {
return nil
}
// 如果是文件,则将文件内容写入到writer中
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(writer, file)
return err
})
return err
}
func main() {
srcFile := "/data/wenjiancaozuo/readLines.txt"
tarFile := "/data/first.zip"
err := ZipFile(srcFile, tarFile)
fmt.Printf("err:%+v", err)
}
|