我正在尝试使用 Go 标准库创建压缩的 tar 存档,特别是 compress/gzip 和 archive/tar。我可以成功创建一个 tar 存档,但是当我尝试压缩所述存档时,无法解压缩生成的 tarball。在 OSX 上,我收到“错误 1 - 不允许操作”要运行此代码,您需要一个foo.txt在同一目录中命名的文件。package mainimport ( "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) }}
1 回答
开满天机
TA贡献1786条经验 获得超13个赞
您需要关闭底层的 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)
}
- 1 回答
- 0 关注
- 230 浏览
添加回答
举报
0/150
提交
取消