Golang不使用MD5比较文件内容是否一致

时间:2022-05-05
本文章向大家介绍Golang不使用MD5比较文件内容是否一致,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
func compare(spath, dpath string) bool {
    sinfo, err := os.Lstat(spath)    

      if err != nil {             

       return false

    }
    dinfo, err := os.Lstat(dpath)    

    if err != nil {        

      return false
    }    

    if sinfo.Size() != dinfo.Size() || !sinfo.ModTime().Equal(dinfo.ModTime())     {       

        return false
    }    

     return comparefile(spath, dpath)
}



func comparefile(spath, dpath string) bool {
    sFile, err := os.Open(spath)    

   if err != nil {        

     return false
    }
    dFile, err := os.Open(dpath)    

      if err != nil {        

        return false
    }
    b := comparebyte(sFile, dFile)
    sFile.Close()
    dFile.Close()    

     return b
}



//下面可以代替md5比较.

func comparebyte(sfile *os.File, dfile *os.File) bool {    

       var sbyte []byte = make([]byte, 512)    

       var dbyte []byte = make([]byte, 512)    

       var serr, derr error    

        for {
        _, serr = sfile.Read(sbyte)
        _, derr = dfile.Read(dbyte)        

         if serr != nil || derr != nil {            

             if serr != derr {               

                return false
            }            

         if serr == io.EOF {                

             break
            }
        }        

        if bytes.Equal(sbyte, dbyte) {            

             continue
        }        

          return false
    }    

        return true

}