gpt4 book ai didi

go - 如何将 tar 文件放入 golang 的 tar 文件中

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

我想创建一个 tar 文件,我想在该 tar 文件中放入其他 tar 文件。层次结构类似于

TopLevelTar.tar.gz
|-->primary/primary.tar
|-->secondary/secondaty.tar
|-->tertiary/tertiary.tar

我怎样才能在 golag 中做到这一点?

最佳答案

我想这可能对您有所帮助。基本上,这个解决方案是从多个文件创建一个 tarball。您只需提供文件路径即可代替 a.go 和 b.go 等

package main

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

func addFile(tw *tar.Writer, path string) error {
file, err := os.Open(path)
if err != nil {
return err
}
defer file.Close()
if stat, err := file.Stat(); err == nil {
// now lets create the header as needed for this file within the tarball
header := new(tar.Header)
header.Name = path
header.Size = stat.Size()
header.Mode = int64(stat.Mode())
header.ModTime = stat.ModTime()
// write the header to the tarball archive
if err := tw.WriteHeader(header); err != nil {
return err
}
// copy the file data to the tarball
if _, err := io.Copy(tw, file); err != nil {
return err
}
}
return nil
}

func main() {
// set up the output file
file, err := os.Create("output.tar.gz")
if err != nil {
log.Fatalln(err)
}
defer file.Close()
// set up the gzip writer
gw := gzip.NewWriter(file)
defer gw.Close()
tw := tar.NewWriter(gw)
defer tw.Close()
// grab the paths that need to be added in
paths := []string{
"a.go",
"b.go",
}
// add each file as needed into the current tar archive
for i := range paths {
if err := addFile(tw, paths[i]); err != nil {
log.Fatalln(err)
}
}
}

关于go - 如何将 tar 文件放入 golang 的 tar 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43648960/

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