Golang--计算文件的MD5值
参考:
http://blog.csdn.net/u014029783/article/details/53762363
用法:
$ go run 01.go -f 1.txt
b9d228f114d3f42e82c6a0315dd21a3a 1.txt
$ go run 01.go -d tmp
503ff3936aeaf06adffe610788c7c091 tmp\wswFileServer5\files\01.md
3cda02c0f373006cebb29438bf0b01c6 tmp\wswFileServer5\main.go
86d5206af37b6bcea4d24b54336eee6b tmp\wswFileServer5\static\js\jquery-2.1.3.min.js
1ae0e64754a542cbea996dec63c326fd tmp\wswFileServer5\static\js\bootstrap.min.js
13986017db1f0f1010ed8ff4c81a0c3a tmp\wswFileServer5\README.md
c93ebb8bb2ae3bc85ac9de96ef6bb827 tmp\wswFileServer5\files\01.go
b9d228f114d3f42e82c6a0315dd21a3a tmp\wswFileServer5\files\1.txt
2b04df3ecc1d94afddff082d139c6f15 tmp\wswFileServer5\files\Koala.jpg
c43eeae863aad788074967b8cabd2dd7 tmp\wswFileServer5\index.html
bb884d3b6b6b09481c5dc25fb4fac7e5 tmp\wswFileServer5\static\css\bootstrap.min.css
$ go run 01.go -d tmp -merge
50f235f6435a3cc6700ca68844ced4c2 tmp
代码:
package main
import (
"crypto/md5"
"flag"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)
//初始化变量
var directory, file *string
var merge *bool
//定义init函数,主要是flag的3个参数
func init() {
directory = flag.String("d", "", "The directory contains all the files that need to calculate the md5 value")
file = flag.String("f", "", "The file that need to caclulate the md5 value")
merge = flag.Bool("merge", false, "Merging all md5 values to one (Folder type only)")
}
func main() {
flag.Parse()
//返回Usage
if *directory == "" && *file == "" {
flag.Usage()
return
}
if *file != "" {
result, err := Md5SumFile(*file)
if err != nil {
panic(err)
}
fmt.Printf("%x %s\n", result, *file) //这里是*file
}
if *directory != "" {
result, err := Md5SumFolder(*directory)
if err != nil {
panic(err)
}
// 开启merge,则只计算总的MD5
if *merge == true {
var s string
for _, v := range result {
s += fmt.Sprintf("%x", v)
}
fmt.Printf("%x %s\n", md5.Sum([]byte(s)), *directory)
} else {
for k, v := range result {
fmt.Printf("%x %s\n", v, k)
}
}
}
}
func Md5SumFile(file string) (value [md5.Size]byte, err error) {
data, err := ioutil.ReadFile(file)
if err != nil {
return
}
value = md5.Sum(data)
return value, nil
}
func Md5SumFolder(folder string) (map[string][md5.Size]byte, error) {
results := make(map[string][md5.Size]byte)
filepath.Walk(folder, func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
//判断文件属性
if info.Mode().IsRegular() {
result, err := Md5SumFile(path)
if err != nil {
return err
}
results[path] = result
}
return nil
})
return results, nil
}
Golang--计算文件的MD5值的更多相关文章
- C#计算文件的MD5值实例
C#计算文件的MD5值实例 MD5 是 Message Digest Algorithm 5(信息摘要算法)的缩写,MD5 一种散列(Hash)技术,广泛用于加密.解密.数据签名和数据完整性校验等方面 ...
- c#计算文件的MD5值
代码: /// <summary> /// 计算文件的 MD5 值 /// </summary> /// <param name="fileName" ...
- 计算文件的MD5值和sha256值
1.计算文件的MD5值. 1)linux系统计算 MD5值:md5sum+文件名 sha256值:sha256su+文件名 2)windows系统计算 MD5值:利用Notepad++工具计算 sha ...
- 在.NET中计算文件的MD5值
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 直接上代码吧: using System; using System.IO; using System.Security. ...
- python计算文件的md5值
前言 最近要开发一个基于python的合并文件夹/目录的程序,本来的想法是基于修改时间的比较,即判断文件有没有改变,比较两个文件的修改时间即可.这个想法在windows的pc端下测试没有问题. 但是当 ...
- 计算文件的MD5值(Java & Rust)
Java public class TestFileMD5 { public final static String[] hexDigits = { "0", "1&qu ...
- 计算字符串和文件的MD5值
//计算字符串的MD5值 public string GetMD5(string sDataIn) { MD5CryptoServiceProvider md5 = new MD5CryptoServ ...
- 计算指定文件的MD5值
/// <summary> /// 计算指定文件的MD5值 /// </summary> /// <param name="fileName"> ...
- c# 计算字符串和文件的MD5值的方法
快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中. <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...
- C# 计算文件的 Hash 值
/// <summary> /// 提供用于计算指定文件哈希值的方法 /// <example>例如计算文件的MD5值: /// <code> /// String ...
随机推荐
- [C++STDlib基础]关于单字符的操作——C++标准库头文件<cctype>
网上实例 总结 /* _STD_BEGIN using _CSTD isalnum; using _CSTD isalpha; using _CSTD iscntrl; using _CSTD isd ...
- Linux负载均衡软件LVS之二(安装篇)
一. 安装LVS软件 1.安装前准备工作操作系统:统一采用Centos4.4版本.地址规划,如表1所示:表1 更详细的信息如图2所示: 图2中的VIP指的是虚拟IP地址,还可以叫做LVS集群的服务I ...
- knn分类算法学习
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
- vim编辑器的简单使用
写这篇文章是因为在更新我的一篇博客 Git的其他用法 的时候,里面的修改已经提交的commit说明这一部分需要用到vim. 在使用git config --global --edit或者git reb ...
- JS算法之快排&冒泡
1.快速排序思想: 1.1 先找数组的最中间的一个数为基准 1.2 把数组通过此基准分为小于基准的left数组和大于基准的right数组, 1.3 递归重复上面的两个步骤, 代码如下: functio ...
- ACM博弈问题小试
题目: 取石子(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作 ...
- linux面试题集锦2《转》
一.填空题: 1. 在Linux系统中,以 文件 方式访问设备 . 2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统. 3. Linux文件系统中每个文件用 索引节点来 ...
- 【转】关于MySQL函数GROUP_CONCAT的使用
GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/ ...
- 数娱科技:借助VR技术可让你了解自己的大脑
你可能很好奇自己的大脑,如果你是一个脑部病患,可能更想了解下自己的大脑.好消息是,脑机接口让这个想法成为可能. 在上周六,AR/VR科技公司广州数娱科技发布了联合5家单位共同研发的"VR人脑 ...
- xtrabackup 开启压缩备份
完整备份innobackupex --defaults-file=/etc/my.cnf --host=localhost --user=bkpuser --password=s3cret /data ...