我正在嘗試用 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.
我只能假設我在這里遺漏了一些非常微不足道的東西,但此刻我不知所措。
如果有人可以幫助我解決這個問題,將不勝感激。
uj5u.com熱心網友回復:
它應該是
h, err := GetHeader(r, l)
代替
h, err := GetHeader(f, l)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/362232.html
