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

目录

背景

分析


背景

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


    
 

你可能感兴趣的:(go常见问题解决汇总,golang,开发语言,后端)