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
}
有疑问加站长微信联系(非本文作者)