gpt4 book ai didi

go - 使用 golang 压缩一个文件文件夹会创建一个损坏的 zip

转载 作者:数据小太阳 更新时间:2023-10-29 03:21:58 29 4
gpt4 key购买 nike

如何将文件正确压缩到包含子目录的文件夹中。

我有一个具有以下结构的本地文件夹:

folder/hello/
folder/hello/world/
folder/hello/world/helloword.txt
folder/index.txt

这是我的代码:

package main

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

func main() {

files, err := listFiles("./folder")
if err != nil {
panic(err)
}

zipMe(files, "test.zip")

for _, f := range files {
fmt.Println(f)
}
fmt.Println("Done!")
}

func listFiles(root string) ([]string, error) {
var files []string

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

}

func zipMe(filepaths []string, target string) error {

flags := os.O_WRONLY | os.O_CREATE | os.O_TRUNC
file, err := os.OpenFile(target, flags, 0644)

if err != nil {
return fmt.Errorf("Failed to open zip for writing: %s", err)
}
defer file.Close()

zipw := zip.NewWriter(file)
defer zipw.Close()

for _, filename := range filepaths {
if err := addFileToZip(filename, zipw); err != nil {
return fmt.Errorf("Failed to add file %s to zip: %s", filename, err)
}
}
return nil

}

func addFileToZip(filename string, zipw *zip.Writer) error {
file, err := os.Open(filename)

if err != nil {
return fmt.Errorf("Error opening file %s: %s", filename, err)
}
defer file.Close()

wr, err := zipw.Create(filename)
if err != nil {

return fmt.Errorf("Error adding file; '%s' to zip : %s", filename, err)
}

if _, err := io.Copy(wr, file); err != nil {
return fmt.Errorf("Error writing %s to zip: %s", filename, err)
}

return nil
}

这会创建一个无法提取的损坏的 zip(我在 mac os 上运行,但这应该没有什么区别)。我还尝试了来自 stackoverflow 的其他几个示例和通过 google 找到的链接,但我总是得到一个损坏的 zip。当我提取它时,我得到一个 135 字节的 zip,我得到 1 个 0 字节的二进制文件)。

如果有人可以帮助我找出我在这里缺少的东西,那就太好了。

谢谢

最佳答案

您需要列出并压缩文件,而不是目录。只需进行此调整即可忽略 listFiles 函数中的目录。

if !info.IsDir() {
files = append(files, path)
}

关于go - 使用 golang 压缩一个文件文件夹会创建一个损坏的 zip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52411569/

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