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  }