gpt4 book ai didi

go - 用代码压缩整个文件夹无法解压缩

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

我使用以下代码压缩整个文件夹,我看到了结果,即创建的 zip 工件,现在我想用 mac zip 应用程序解压缩它,但出现以下错误

enter image description here我用于压缩此文件夹的代码是:我在这里想念什么?还是在 Golang 中有更好的方法?

func zipit(source, target string) error {
zipfile, err := os.Create(target)
if err != nil {
return err
}
defer zipfile.Close()

archive := zip.NewWriter(zipfile)
defer archive.Close()

info, err := os.Stat(source)
if err != nil {
return nil
}

var baseDir string
if info.IsDir() {
baseDir = filepath.Base(source)
}

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

header, err := zip.FileInfoHeader(info)
if err != nil {
return err
}

if baseDir != "" {
header.Name = filepath.Join(baseDir, strings.TrimPrefix(path, source))
}

if info.IsDir() {
header.Name += "/"
} else {
header.Method = zip.Deflate
}

writer, err := archive.CreateHeader(header)
if err != nil {
return err
}

if info.IsDir() {
return nil
}

file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
_, err = io.Copy(writer, file)
return err
})

return err
}

最佳答案

因为命令行工具的重新实现要慢得多,所以最好只使用 exec.Command。创建存档后,您可以读取它并将其发送到您喜欢的地方。

func main() {
pwd := os.Getenv("PWD")
dest := pwd + "/testdir.zip"
src := pwd + "/testdir"

err := Zip(src, dest)
if err != nil {
log.Fatal(err)
}
}

func Zip(src, dest string) error {
zipper := exec.Command("zip", "-rj", dest, src)
fmt.Println(zipper.Args)
err := zipper.Run()
if err != nil {
return err
}
return nil
}

注意:这可能因您的操作系统而异。这在 OSX 上为我运行。

关于go - 用代码压缩整个文件夹无法解压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571096/

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