Golang: 如何将文件添加到现有的 ZIP 压缩包中
要将文件添加到现有的 ZIP 压缩包中,可以使用 Go 语言内置的 archive/zip 包。以下是一个示例代码:
package main
import (
"archive/zip"
"fmt"
"io"
"os"
)
func main() {
// 打开现有的 ZIP 文件
existingZipFile, err := os.OpenFile('example.zip', os.O_RDWR, 0644)
if err != nil {
fmt.Println(err)
return
}
defer existingZipFile.Close()
// 创建一个 ZIP 文件的读写器
zipReader, err := zip.NewReader(existingZipFile, existingZipFile.Stat().Size())
if err != nil {
fmt.Println(err)
return
}
// 创建一个新的 ZIP 文件
newZipFile, err := os.Create('new.zip')
if err != nil {
fmt.Println(err)
return
}
defer newZipFile.Close()
// 创建一个 ZIP 文件的写入器
zipWriter := zip.NewWriter(newZipFile)
// 复制现有 ZIP 文件中的所有文件到新的 ZIP 文件中
for _, file := range zipReader.File {
// 打开现有文件
existingFile, err := file.Open()
if err != nil {
fmt.Println(err)
return
}
defer existingFile.Close()
// 创建一个新文件
newFile, err := zipWriter.Create(file.Name)
if err != nil {
fmt.Println(err)
return
}
// 复制现有文件的内容到新文件中
_, err = io.Copy(newFile, existingFile)
if err != nil {
fmt.Println(err)
return
}
}
// 添加新文件到新的 ZIP 文件中
newFile, err := zipWriter.Create('newfile.txt')
if err != nil {
fmt.Println(err)
return
}
// 写入新文件的内容
_, err = newFile.Write([]byte('Hello, world!'))
if err != nil {
fmt.Println(err)
return
}
// 关闭 ZIP 文件的写入器
err = zipWriter.Close()
if err != nil {
fmt.Println(err)
return
}
}
以上代码将现有的 example.zip 文件复制到一个新的 new.zip 文件中,并添加一个名为 newfile.txt 的新文件。要添加更多文件,可以使用 zipWriter.Create 方法创建新文件并将其内容写入。最后,记得关闭 ZIP 文件的写入器。
原文地址: https://www.cveoy.top/t/topic/mWW2 著作权归作者所有。请勿转载和采集!