我正在尝试在 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.
我只能假设我在这里遗漏了一些非常微不足道的东西,但此刻我不知所措。
如果有人可以帮助我解决这个问题,将不胜感激。
呼如林
Smart猫小萌
随时随地看视频慕课网APP
相关分类