github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/fileutil/md5.go (about) 1 package fileutil 2 3 import ( 4 "crypto/md5" 5 "encoding/hex" 6 "io" 7 "os" 8 "strings" 9 ) 10 11 func FileMD5(fn string) (string, error) { 12 h := md5.New() 13 14 f, err := os.Open(fn) 15 if err != nil { 16 return "", err 17 } 18 defer f.Close() 19 if _, err := io.Copy(h, f); err != nil { 20 return "", err 21 } 22 return hex.EncodeToString(h.Sum(nil)), nil 23 } 24 25 func MD5Files(dir string, files []string) (string, error) { 26 sb := strings.Builder{} 27 for _, fn := range files { 28 md5, err := FileMD5(dir + "/" + fn) 29 if err != nil { 30 return "", err 31 } 32 sb.WriteString(md5) 33 sb.WriteString(" ") 34 sb.WriteString(fn) 35 sb.WriteString("\n") 36 } 37 return sb.String(), nil 38 }