代码如下
fInfo, err := os.Stat(fp)
if err != nil {
fmt.Println(err.Error())
return
}
header, err := tar.FileInfoHeader(fInfo, "")
if err != nil {
fmt.Println(err.Error())
return
}
header.Name = name
if header.Format == tar.FormatUnknown {
header.Format = tar.FormatGNU
}
err = this.writer.WriteHeader(header)
if err != nil {
fmt.Println(err.Error())
return
}
f, err := os.Open(fp)
if err != nil {
fmt.Println(err.Error())
return
}
defer f.Close()
_, err = io.Copy(this.writer, f)
fmt.Println(err.Error())
return
报告转移代码错误
this.writer.WriteHeader(header)
错误如下
archive/tar: missed writing 15251 bytes
我测试了很多次,不知道为什么会这样出现这个错误。
需要注意的是,我打包的内容是U盘中的内容
正如文档中提到的,WriteHeader隐式调用Flush,后者又检查是否有剩余字节数要写入。如果是这样,它将返回您收到的错误。
剩余字节数存储在
nb
变量中,并在第一次写入标头时初始化。那么每写入一些内容就会减少写入的字节数。
如果
nb
大于零,并且您尝试第二次调用 WriteHeader
,您将收到此错误。