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 ...
随机推荐
- POJ 2409 Let it Bead 组合数学
题目地址: http://poj.org/problem?id=2409 给你一串珠子有m个,用n种不同的颜色涂色,问有多少种分法. 用polay定理求解,对于排成一排的带编号的小球,按照某一种方案改 ...
- 调试设置移动端Web开发环境搭建实践
新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 本文重要总结一下挪动端进行前端开发时需要用到的一些工具,以及他们之间互相的组合,同时也包含本人应用的组合. 1. Chrome To ...
- 开发一个微信小程序项目教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 基于TcpListener实现最简单的http服务器
最近实现一套简单的网络程序.为了查看程序内部的变量,方便调试.就在想搞一个最最简单的方式.第一个想到写文件,日志.这个不实时,而且打开麻烦,pass .于是想到用网络输出.本来是想写成c/s模式,想着 ...
- C语言之进制
进制 一种计数的方式.侧重点在于计数的时候是逢多少进一. 1) C语言可以识别的进制 二进制 每一位. 0 0 1 0 0 1 1 0 1 0 1 0 0 1 0 1 1 0 在C语言中,写 ...
- [ios2]判断retina 屏幕
判断是否retina屏幕 #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSize ...
- 《Django By Example》第六章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:无他,祝大家年会都中奖!) 第六章 ...
- java基础IO删除文件夹文件
/** * 定义一个方法,能够删除任意文件夹,文件夹路径由键盘录入 注意:不要在C盘下做测试,请选定无用的文件夹测试! */ 1.键盘录入 private static File getfile() ...
- windows全系列激活脚本-改良版.cmd
@ECHO OFFTITLE Windows 全版本系统激活cscript //nologo %Systemroot%\system32\slmgr.vbs -skms 10.1.1.12ECHO 检 ...
- restful Api 风格契约设计器:Swagger-editor和swagger-ui的应用
swagger-editor的安装 swagger-editor应用的yaml语法,有定义变量和数据结构,不明白可以参考其示例 安装步骤: 下载swagger-editor git地址 运行npm r ...