gpt4 book ai didi

go - 如何在 Golang 中压缩包含子目录或文件的目录?

转载 作者:IT王子 更新时间:2023-10-29 01:21:29 27 4
gpt4 key购买 nike

我知道这与 zip package 有关我只是不知道我将如何实现这样的事情。

最佳答案

要手动执行此操作,您可以修改上面链接的代码:

ExampleZipWriter

给你一个简单的例子,它有很多缺陷,但可能很容易理解:

func ZipWriter() {
baseFolder := "/Users/tom/Desktop/testing/"

// Get a Buffer to Write To
outFile, err := os.Create(`/Users/tom/Desktop/zip.zip`)
if err != nil {
fmt.Println(err)
}
defer outFile.Close()

// Create a new zip archive.
w := zip.NewWriter(outFile)

// Add some files to the archive.
addFiles(w, baseFolder, "")

if err != nil {
fmt.Println(err)
}

// Make sure to check the error on Close.
err = w.Close()
if err != nil {
fmt.Println(err)
}
}

我们也使用它来递归地迭代文件以生成文件夹:

func addFiles(w *zip.Writer, basePath, baseInZip string) {
// Open the Directory
files, err := ioutil.ReadDir(basePath)
if err != nil {
fmt.Println(err)
}

for _, file := range files {
fmt.Println(basePath + file.Name())
if !file.IsDir() {
dat, err := ioutil.ReadFile(basePath + file.Name())
if err != nil {
fmt.Println(err)
}

// Add some files to the archive.
f, err := w.Create(baseInZip + file.Name())
if err != nil {
fmt.Println(err)
}
_, err = f.Write(dat)
if err != nil {
fmt.Println(err)
}
} else if file.IsDir() {

// Recurse
newBase := basePath + file.Name() + "/"
fmt.Println("Recursing and Adding SubDir: " + file.Name())
fmt.Println("Recursing and Adding SubDir: " + newBase)

addFiles(w, newBase, baseInZip + file.Name() + "/")
}
}
}

关于go - 如何在 Golang 中压缩包含子目录或文件的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37869793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com