1. 程式人生 > >怎樣計算大檔案的MD5

怎樣計算大檔案的MD5

package main

import (
    "crypto/md5"
    "fmt"
    "io/ioutil"
    "os"
    "path/filepath"
    "sort"
)

// MD5All讀取檔案目錄root下所有檔案,並返回從檔案路徑到檔案內容MD5值的對映。如果掃描目錄
// 出錯或者任何操作失敗,MD5All返回失敗。
func MD5All(root string) (map[string][md5.Size]byte, error) {
    m := make(map[string][md5.Size]byte)
    err := filepath.Walk(root, func
(path string, info os.FileInfo, err error) error { if err != nil { return err } if info.IsDir() { return nil } data, err := ioutil.ReadFile(path) if err != nil { return err } m[path] = md5.Sum(data) return
nil }) if err != nil { return nil, err } return m, nil } func main() { // 計算指定目錄下所有檔案的MD5值,之後按照目錄名排序並列印結果 m, err := MD5All(os.Args[1]) if err != nil { fmt.Println(err) return } var paths []string for path := range m { paths = append
(paths, path) } sort.Strings(paths) for _, path := range paths { fmt.Printf("%x %s\n", m[path], path) } }