目录
第一步:读取文件,获得file对象
第二步:获取文件md5
第三步:获取到md5后继续使用(读取)file对象,发现一次就读完了(EOF),但实际一次不可能读完
代码如下:
?? ?md5hash := md5.New()
?? ?
?? ?// md5hash可以作为io.Writer使用
?? ?totalSize, err := io.Copy(md5hash, file) ?// file 为*os.File类型,即读取文件后的文件对象
?? ?if err != nil {
?? ??? ?return err
?? ?}
?? ?md5Str := fmt.Sprintf("%x", md5hash.Sum(nil))
?? ?
?? ?for {
?? ??? ?
?? ??? ?n, err := reader.Read(buf)
?? ??? ?// 读取完成
?? ??? ?if n == 0 && err == io.EOF {
?? ??? ??? ?break?
?? ??? ?}
?? ??? ?
?? ??? ?// ...处理本次读取结果
?? ?}
如上代码中,在获得该文件的md5后,file对象此时已指向文件末尾,因此接着读取必然是EOF直接结束。
此时需要重新回溯指针到文件开始位置,然后才能继续使用file读取完整数据。
即在获得md5之后、接着读取之前增加:
file.Seek(0, 0)
?? ?
?