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
}
查看原文:http://www.zoues.com/2016/10/20/golang%e4%b8%8d%e4%bd%bf%e7%94%a8md5%e6%af%94%e8%be%83%e6%96%87%e4%bb%b6%e5%86%85%e5%ae%b9%e6%98%af%e5%90%a6%e4%b8%80%e8%87%b4/
Golang不使用MD5比较文件内容是否一致
最新推荐文章于 2024-07-25 19:15:00 发布