Golang Go语言中怎么在 zip 包里追加或覆盖新的文件?
Golang Go语言中怎么在 zip 包里追加或覆盖新的文件?
看标准库只有解压再压缩的方法,如果文件大且很多小文件的话感觉会不合理。
1 回复
更多关于Golang Go语言中怎么在 zip 包里追加或覆盖新的文件?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Go 语言中,操作 ZIP 文件(如追加或覆盖文件)通常需要使用标准库 archive/zip。下面是一个基本的示例,演示如何打开一个现有的 ZIP 文件、添加或覆盖其中的文件,然后将修改后的内容写回文件。
- 打开现有的 ZIP 文件:使用
zip.NewReader读取现有的 ZIP 文件。 - 创建新的 ZIP 写入器:创建一个新的 ZIP 文件用于写入修改后的内容。
- 遍历并复制原有文件:将原有 ZIP 文件中的条目复制到新的 ZIP 文件中。
- 添加或覆盖新文件:根据需要添加新文件或覆盖现有文件。
- 关闭并保存:关闭所有打开的句柄,保存修改后的 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 中。

