ZBLOG

golang 将文件夹压缩为zip

在 Golang 中,可以使用 “archive/zip” 包来压缩文件夹为 zip 格式。

以下是一个示例程序:

package main

import (
    "archive/zip"
    "fmt"
    "io"
    "os"
    "path/filepath"
)

func main() {
    dir := "/path/to/folder"
    zipFile, err := os.Create("folder.zip")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer zipFile.Close()

    zipWriter := zip.NewWriter(zipFile)
    defer zipWriter.Close()

    filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }

        header, err := zip.FileInfoHeader(info)
        if err != nil {
            return err
        }

        header.Name = path[len(dir)+1:]
        if info.IsDir() {
            header.Name += "/"
        } else {
            header.Method = zip.Deflate
        }

        writer, err := zipWriter.CreateHeader(header)
        if err != nil {
            return err
        }

        if !info.IsDir() {
            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
    })

    fmt.Println("Folder compressed successfully.")
}

该程序将指定的文件夹压缩为 zip 格式,并将其保存到名为 “folder.zip” 的文件中。在程序中,我们使用了 “filepath.Walk” 函数递归遍历文件夹中的所有文件和子文件夹,然后将它们添加到 zipWriter 中。在添加每个文件之前,我们使用 “zip.FileInfoHeader” 函数创建一个新的文件头,然后将其写入到 zip 文件中。如果当前文件是一个目录,则我们只需要将其名称作为目录条目的名称添加到 zipWriter 中即可。如果当前文件是一个普通文件,则我们需要使用 “os.Open” 打开文件,然后使用 “io.Copy” 将其内容复制到 zipWriter 中。

最后,我们使用 fmt.Println 函数输出 “Folder compressed successfully.” 来表示程序已成功完成压缩过程。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=765

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?