이동 파일의 기존 tar 아카이브에 파일을 추가하려면 어떻게해야합니까? 나는 그것을하는 방법에 관해서는 docs에서 명백한 것을 보지 못했다.Golang : 기존 tar 아카이브에 파일 추가
이미 생성 된 tar 파일이 있는데 이미 닫힌 후에 더 추가하고 싶습니다.
편집
워드 프로세서의 예를 변경하고 난 여전히 예상 된 결과를받지 못했습니다, 대답은 주어진 다음과 같습니다. 처음 세 파일은 tar에 쓰여지지만, 파일을 닫고 다시 열면 새로운 파일이 쓰여지지 않습니다. 코드가 제대로 실행됩니다. 내가 뭘 놓치고 있는지 모르겠다.
다음 코드는 readme.txt, gopher.txt, todo.txt의 세 파일이 들어있는 tar 파일을 제공합니다. 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 파일에서 발생합니다. 그것은 아마 나쁜 생각입니다. –
그게 내가 생각한거야하지만 난 여전히 정상적인 타르 파일처럼 액세스 할 수 있습니다 – Jeff
@ 제프 내가 제공 한 대답을 좀 봐. 'Seek '를 사용하는 것은 여전히 약간 사기성이지만 유효한 tar 파일을 생성합니다. – Intermernet