golang实现gzip压缩目录
要实现Golang中的gzip压缩目录,可以使用archive/zip和compress/gzip包。
下面是一个示例代码,可以将整个目录压缩为gzip文件:
package main
import (
"archive/zip"
"compress/gzip"
"io"
"os"
"path/filepath"
)
func main() {
inputDir := "input" // 要压缩的目录
outputFile := "output.gz" // 压缩后的输出文件
// 创建输出文件
outFile, err := os.Create(outputFile)
if err != nil {
panic(err)
}
defer outFile.Close()
// 创建gzip writer
gzipWriter := gzip.NewWriter(outFile)
defer gzipWriter.Close()
// 创建zip writer
zipWriter := zip.NewWriter(gzipWriter)
defer zipWriter.Close()
// 遍历目录并压缩文件
err = filepath.Walk(inputDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
// 忽略目录
if info.IsDir() {
return nil
}
// 创建文件的压缩写入器
zipFile, err := zipWriter.Create(path)
if err != nil {
return err
}
// 打开文件
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
// 将文件内容拷贝到压缩写入器中
_, err = io.Copy(zipFile, file)
if err != nil {
return err
}
return nil
})
if err != nil {
panic(err)
}
println("压缩完成")
}
在上面的代码中,inputDir是要压缩的目录路径,outputFile是压缩后的输出文件路径。代码首先创建输出文件,然后创建gzip writer和zip writer。然后使用filepath.Walk函数遍历目录中的所有文件,并将每个文件写入到zip writer中。最后,关闭所有的写入器,完成压缩。
请注意,上述代码仅演示了如何将目录压缩为gzip文件。如果要将目录压缩为zip文件,可以直接使用archive/zip包中的zipWriter。
原文地址: https://www.cveoy.top/t/topic/iaEC 著作权归作者所有。请勿转载和采集!