golang代码实例库

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2456|回复: 0

golang:将文件或目录压缩成zip文件

[复制链接]

82

主题

82

帖子

486

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
486
发表于 2021-12-13 22:14:29 | 显示全部楼层 |阅读模式
实例说明
对于一些大的文件或目录,对其进行压缩是个好的办法。
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)

}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|golang代码实例库 ( 粤ICP备2021162396号 )

GMT+8, 2025-1-22 13:41 , Processed in 0.035007 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表