怎样计算大文件的MD5

zhaohao · · 975 次点击 · 开始浏览   
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
小文件可以这样,但是大文件怎么办???? ~~~ 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) } } ~~~
975 次点击  
加入收藏 微博
3 回复  |  直到 2017-07-06 16:17:26
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传