Golang 向 tar 包写入 header 失败?

问题描述 投票:0回答:1

代码如下

    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盘中的内容

go tar
1个回答
0
投票

正如文档中提到的,WriteHeader隐式调用Flush,后者又检查是否有剩余字节数要写入。如果是这样,它将返回您收到的错误

剩余字节数存储在

nb
变量中,并在第一次写入标头时初始化。那么每写入一些内容就会减少写入的字节数。

如果

nb
大于零,并且您尝试第二次调用
WriteHeader
,您将收到此错误。

© www.soinside.com 2019 - 2024. All rights reserved.