下面是我的代码片段,它收集了一些gzip压缩的PDF文件.
我想将PDF添加到tar.gz
文件中,但在添加它们之前,需要对它们进行解压缩(Gzip).我不想以一个充满了pdf.gz
个文件的tar.gz
结尾
需要将其解压缩,而无需将整个文件读取到内存中.tar.gz
中的PDF文件被剪裁和损坏.当我比较tar.gz
个文件和原始的PDF文件时,除了tar.gz
个文件被剪切外,看起来是一样的.每个文件的最后一部分都不见了
// Create new gz writer with compression level 1
gzw, _ := gzip.NewWriterLevel(w, 1)
defer gzw.Close()
// Create new tar writer
tw := tar.NewWriter(gzw)
defer tw.Close()
file_path := "path-to-file.pdf.gz"
file_name := "filename-shown-in-tar.pdf"
// Open file to add to tar
fp, err := os.Open(file_path)
if err != nil {
log.Printf("Error: %v", err)
}
defer fp.Close()
file_name := file[1]+file_ext
info, err := fp.Stat()
if err != nil {
log.Printf("Error: %v", err)
}
header, err := tar.FileInfoHeader(info, file_name)
if err != nil {
log.Printf("Error: %v", err)
}
header.Name = file_name
tw.WriteHeader(header)
// This part will write the *.pdf.gz files directly to the tar.gz file
// This part works and it's possible to both open the tar.gz file and
// afterwards open the individuel pdf.gz files
//io.Copy(tw, fp)
// This part decode the gz before adding, but it clips the pdf files in
// the tar.gz file
gzr, err := gzip.NewReader(fp)
if err != nil {
log.Printf("Error: %v", err)
}
defer gzr.Close()
io.Copy(tw, gzr)
update
我从一条 comments 中得到了一个建议,但现在TAR中的PDF文件无法打开.Tar.gz文件已创建并可打开,但其中的PDF文件已损坏
我已try 将tar.gz
的输出文件与原始PDF进行比较.看起来损坏的文件丢失了文件的最后一部分.
在一个例子中,原始文件有498行,而损坏的文件只有425行.但它看起来425行与原始的相同.不知怎么的,最后一块被剪掉了