小编Die*_*rop的帖子

为什么通过TeeReader的tar.gz的tar-part的md5哈希错误?

我只是尝试使用archive/tar和compress/gzip来自动处理我的一些备份.

我的问题是:我有各种.tar文件和.tar.gz文件浮动,因此我想提取.tar.gz文件的哈希值(md5)和.tar文件的哈希值(md5)同样,理想情况下一次运行.

我到目前为止的示例代码完全适用于.tar.gz中的文件的哈希以及.gz,但.tar的哈希是错误的,我无法找出问题是什么.

我查看了tar/reader.go文件,我看到有一些跳过,但我认为一切都应该在io.Reader接口上运行,因此TeeReader仍然应该捕获所有字节.

package main

import (
    "archive/tar"
    "compress/gzip"
    "crypto/md5"
    "fmt"
    "io"
    "os"
)

func main() {
    tgz, _ := os.Open("tb.tar.gz")
    gzMd5 := md5.New()
    gz, _ := gzip.NewReader(io.TeeReader(tgz, gzMd5))
    tarMd5 := md5.New()
    tr := tar.NewReader(io.TeeReader(gz, tarMd5))
    for {
        fileMd5 := md5.New()
        hdr, err := tr.Next()
        if err == io.EOF {
            break
        }
        io.Copy(fileMd5, tr)
        fmt.Printf("%x  %s\n", fileMd5.Sum(nil), hdr.Name)
    }
    fmt.Printf("%x  tb.tar\n", tarMd5.Sum(nil))
    fmt.Printf("%x  tb.tar.gz\n", gzMd5.Sum(nil))
}
Run Code Online (Sandbox Code Playgroud)

现在为以下示例:

$ echo "a" > a.txt
$ echo "b" > b.txt
$ tar …
Run Code Online (Sandbox Code Playgroud)

gzip md5 tar go

5
推荐指数
1
解决办法
1705
查看次数

标签 统计

go ×1

gzip ×1

md5 ×1

tar ×1