如何將文件追加到Go中的現有tar歸檔文件中?在docs中我沒有看到有關如何執行此操作的任何明顯信息。Golang:將文件追加到現有的tar歸檔文件
我有一個tar文件已經被創建,我想在它已經關閉後添加更多。
編輯
改變在文檔中的例子和下面的答案給定的,我仍然沒有得到預期的結果。前三個文件正在寫入tar,但是當我關閉並再次打開文件以寫入文件時,新文件永遠不會被寫入。代碼運行良好。我不知道我錯過了什麼。
下面的代碼給了我一個包含三個文件的tar文件:readme.txt,gopher.txt,todo.txt。 foo.bar永遠不會被寫入。
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()
}
註釋掉尾部部分會導致一個無效的tar文件。這可能是一個壞主意。 –
這就是我的想法,但我仍然可以像訪問正常的tar文件一樣訪問它 – Jeff
@Jeff看看我提供的答案。使用'Seek'仍然有點不禮貌,但它確實產生了一個有效的tar文件。 – Intermernet