go获取文件md5后接着读取file对象EOF的问题记录

发布时间:2024年01月15日

目录

背景

分析


背景

第一步:读取文件,获得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)


?? ?
?

文章来源:https://blog.csdn.net/HYZX_9987/article/details/135536600
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。