为了账号安全,请及时绑定邮箱和手机立即绑定

如何从 gzip 存档中的文件流式传输数据,以便测试标头?

如何从 gzip 存档中的文件流式传输数据,以便测试标头?

Go
呼如林 2022-10-17 09:39:58
我正在尝试在 Go 中编写一个提取工具,它将解压缩/提取几种类型的存档文件。为了检查文件的类型,我使用了幻数,并且已经成功地直接检查.gz和.tar归档,但是对于任何.tar.gz/.tgz归档,我似乎无法检查 Gzip 包中的 tar 文件。我目前的思路是,我需要获取输出gzip.NewReader(f)并拉动其输出的标题,但这不起作用。f, err := os.Open(file)if err != null {  return fmt.Errorf("problem opening %s", filename)}r, _ := gzip.NewReader(f)h, err := GetHeader(r, l)这里,GetHeader是...func GetHeader(r io.Reader, l uint32) (in []byte, err error) {    fmt.Println("Here C")    in = make([]byte, l)    n := 0    n, err = io.ReadFull(r, in)    if err != nil && err != io.EOF && err != io.ErrUnexpectedEOF {        fmt.Println("Here D")        return nil, err    }    fmt.Println(n)    in = in[:n]    return in, nil}它用于成功地自行检查 Gzip 和 Tar 存档,总而言之,l设置为uint32 3072.我只能假设我在这里遗漏了一些非常微不足道的东西,但此刻我不知所措。如果有人可以帮助我解决这个问题,将不胜感激。
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

它应该是

h, err := GetHeader(r, l)

代替

h, err := GetHeader(f, l)


查看完整回答
反对 回复 2022-10-17
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信