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
}