gpt4 book ai didi

go - 如何使用 compress/gzip 和 archive/tar 创建压缩的 tar 文件?

转载 作者:IT王子 更新时间:2023-10-29 00:56:42 26 4
gpt4 key购买 nike

我正在尝试使用 Go 标准库创建一个压缩的 tar 存档,特别是 compress/gzip 和 archive/tar。我可以成功创建一个 tar 存档,但是当我尝试压缩所述存档时,生成的 tarball 无法解压缩。在 OSX 上,我收到“错误 1 ​​- 不允许操作”

要运行此代码,您需要在同一目录中有一个名为 foo.txt 的文件。

package main

import (
"archive/tar"
"bytes"
"compress/gzip"
"io/ioutil"
"log"
"os"
)

func main() {
var b bytes.Buffer

// Create a new zip archive.
w := tar.NewWriter(gzip.NewWriter(&b))

fi, err := os.Stat("foo.txt")

if err != nil {
log.Fatal(err)
}

header, err := tar.FileInfoHeader(fi, "")

if err != nil {
log.Fatal(err)
}

err = w.WriteHeader(header)

if err != nil {
log.Fatal(err)
}

contents, err := ioutil.ReadFile("foo.txt")

if err != nil {
log.Fatal(err)
}

_, err = w.Write(contents)

if err != nil {
log.Fatal(err)
}

err = w.Close()

// Make sure to check the error on Close.
err = ioutil.WriteFile("foo.tar.gz", b.Bytes(), 0666)

if err != nil {
log.Fatal(err)
}
}

最佳答案

您需要关闭底层 gzip 编写器,以确保所有字节都被刷新到文件中。像这样:

    // gzip writer
gz := gzip.NewWriter(f)

// Create a new tar archive.
w := tar.NewWriter(gz)

// add things to the tar archive
// ...

// make sure the gzip writer flushes any pending bytes
if err = gz.Close(); err != nil {
log.Fatal(err)
}

关于go - 如何使用 compress/gzip 和 archive/tar 创建压缩的 tar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459793/

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