Golang Go语言中怎么在 zip 包里追加或覆盖新的文件?

Golang Go语言中怎么在 zip 包里追加或覆盖新的文件?
看标准库只有解压再压缩的方法,如果文件大且很多小文件的话感觉会不合理。

1 回复

更多关于Golang Go语言中怎么在 zip 包里追加或覆盖新的文件?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 Go 语言中,操作 ZIP 文件(如追加或覆盖文件)通常需要使用标准库 archive/zip。下面是一个基本的示例,演示如何打开一个现有的 ZIP 文件、添加或覆盖其中的文件,然后将修改后的内容写回文件。

  1. 打开现有的 ZIP 文件:使用 zip.NewReader 读取现有的 ZIP 文件。
  2. 创建新的 ZIP 写入器:创建一个新的 ZIP 文件用于写入修改后的内容。
  3. 遍历并复制原有文件:将原有 ZIP 文件中的条目复制到新的 ZIP 文件中。
  4. 添加或覆盖新文件:根据需要添加新文件或覆盖现有文件。
  5. 关闭并保存:关闭所有打开的句柄,保存修改后的 ZIP 文件。

示例代码如下:

package main

import (
    "archive/zip"
    "bytes"
    "fmt"
    "io"
    "os"
)

func main() {
    // 打开现有 ZIP 文件
    r, err := zip.OpenReader("existing.zip")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer r.Close()

    // 创建新的 ZIP 文件
    var buf bytes.Buffer
    w := zip.NewWriter(&buf)
    defer w.Close()

    // 复制原有文件(省略)
    // 添加或覆盖新文件
    // 例如,添加一个名为 "newfile.txt" 的文件
    addFileToZip(w, "newfile.txt", []byte("Hello, World!"))

    // 将修改后的内容写入新文件
    os.WriteFile("modified.zip", buf.Bytes(), 0644)
}

// addFileToZip 函数用于向 ZIP 写入器中添加文件(省略实现细节)

注意:此示例省略了部分实现细节,如复制原有文件到新 ZIP 文件中的代码。具体实现时,需遍历 r.File 列表,并将每个文件复制到 w 中。

回到顶部