Luego de de una larga recopilación de datos pudimos resolver esta contrariedad que tienen ciertos los usuarios. Te regalamos la respuesta y nuestro deseo es resultarte de gran ayuda.
Solución:
los tar
la especificación del archivo establece:
Un archivo tar consta de una serie de registros de 512 bytes. Cada objeto del sistema de archivos requiere un registro de encabezado que almacene metadatos básicos (nombre de ruta, propietario, permisos, etc.) y cero o más registros que contengan datos de archivo. El final del archivo está indicado por dos registros que consisten completamente en cero bytes.
La implementación de Go de agregar estos dos registros con ceros ocurre aquí.
para moverse por el tar
tráiler de formato de archivo (básicamente 1024 bytes de nada) podría reemplazar las líneas:
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)
Con:
f, err = os.OpenFile("/home/jeff/Desktop/test.tar", os.O_RDWR, os.ModePerm)
if err != nil
log.Fatalln(err)
if _, err = f.Seek(-1024, os.SEEK_END); err != nil
log.Fatalln(err)
tw = tar.NewWriter(f)
Abre el archivo de lectura/escritura (en lugar de agregar/solo escribir) y luego busca 1024 bytes antes del final del archivo y escribe desde allí.
Funciona, pero es un truco horrible.
EDITAR: Después de entender el tar
especificaciones de archivo un poco mejor, ya no creo que esto sea un truco.
Código completo: http://play.golang.org/p/0zRScmY4AC
Es solo una interfaz de escritura, así que escriba bytes después de escribir el encabezado de sus archivos.
import (
"archive/tar"
"os"
)
f, err := os.OpenFile(path, os.O_APPEND|os.O_WRONLY, os.ModePerm)
if err != nil
// handle error here
hdr := tar.Header
// populate your header
tw := tar.NewWriter(f)
// append a file
tw.WriteHeader(hdr)
tw.Write(content_of_file_as_bytes)
http://golang.org/pkg/archive/tar/#Writer le dice todo lo que necesita saber.
EDITAR: Resulta que los archivos tar obtienen un avance escrito hasta el final cuando se cierra. Entonces, aunque esté escribiendo nuevos datos en el archivo tar, no se leerán más allá de ese tráiler. Entonces, en cambio, parece que primero tendrá que leer el archivo tar y luego volver a escribir todo el archivo en el disco, lo cual no es óptimo. Sin embargo, el paquete no admite las cosas necesarias para agregarlas, por lo que es lo mejor que puedo recomendar en este momento.
Valoraciones y comentarios
Tienes la posibilidad dar difusión a este tutorial si te fue de ayuda.