Golang: dołącz plik do istniejącego archiwum tar
Jak dołączyć plik do istniejącego archiwum tar w Go? Nie widzę niczego oczywistego wdocs jak to zrobić.
Mam plik tar, który został już utworzony i chcę dodać do niego więcej po tym, jak został już zamknięty.
EDYTOWAĆ
Zmieniając przykład w dokumentach i idąc za odpowiedzią, wciąż nie otrzymuję oczekiwanego rezultatu. Pierwsze trzy pliki są zapisywane w tar, ale po zamknięciu i ponownym otwarciu pliku w celu zapisania do niego, nowy plik nigdy nie jest zapisywany. Kod działa dobrze. Nie wiem, czego mi brakuje.
Poniższy kod daje mi plik tar z trzema plikami: readme.txt, gopher.txt, todo.txt. foo.bar nigdy nie zostanie napisany.
package main
import (
"archive/tar"
"log"
"os"
)
func main() {
f, err := os.Create("/home/jeff/Desktop/test.tar")
if err != nil {
log.Fatalln(err)
}
tw := tar.NewWriter(f)
var files = []struct {
Name, Body string
}{
{"readme.txt", "This archive contains some text files."},
{"gopher.txt", "Gopher names:\nGeorge\nGeoffrey\nGonzo"},
{"todo.txt", "Get animal handling licence."},
}
for _, file := range files {
hdr := &tar.Header{
Name: file.Name,
Size: int64(len(file.Body)),
}
if err := tw.WriteHeader(hdr); err != nil {
log.Fatalln(err)
}
if _, err := tw.Write([]byte(file.Body)); err != nil {
log.Fatalln(err)
}
}
if err := tw.Close(); err != nil {
log.Fatalln(err)
}
f.Close()
// Open up the file and append more things to it
f, err = os.OpenFile("/home/jeff/Desktop/test.tar", os.O_APPEND|os.O_WRONLY, os.ModePerm)
if err != nil {
log.Fatalln(err)
}
tw = tar.NewWriter(f)
test := "this is a test"
hdr := &tar.Header{
Name: "foo.bar",
Size: int64(len(test)),
}
if err := tw.WriteHeader(hdr); err != nil {
log.Fatalln(err)
}
if _, err := tw.Write([]byte(test)); err != nil {
log.Fatalln(err)
}
if err := tw.Close(); err != nil {
log.Fatalln(err)
}
f.Close()
}