C# get folder's Md5 generated by file's and filename's md5. get dictionary md5
C# get dictionary md5
static string GetDicMD5(string dirFullName)
{ logBuilder = new StringBuilder();
Dictionary<string, string> folderMd5Dic = GetFolderFilesAndNameMD5Dic(dirFullName);
if (folderMd5Dic == null && folderMd5Dic.Any())
{
return null;
} using (MemoryStream ms = new MemoryStream())
{
using (MD5 folderDicMd5 = MD5.Create())
{
StringBuilder folderDicBuilder = new StringBuilder();
BinaryFormatter binFormatter = new BinaryFormatter();
binFormatter.Serialize(ms, folderMd5Dic);
byte[] folderDicMd5Bytes = folderDicMd5.ComputeHash(ms);
if(folderDicMd5Bytes!=null && folderDicMd5Bytes.Any())
{
for(int i=;i<folderDicMd5Bytes.Length;i++)
{
folderDicBuilder.Append(folderDicMd5Bytes[i].ToString("x2"));
}
}
return folderDicBuilder.ToString();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary; namespace FolderMd5NS
{
class Program
{
static StringBuilder logBuilder=null;
static int fileMd5Num = ;
static int totalFilesNum = ;
static void Main(string[] args)
{
string dirFullName = @"D:\C";
try
{
string currentoFolderMd5 = GetFolderMD5(dirFullName);
Console.WriteLine(currentoFolderMd5);
}
catch
{ } finally
{
using (StreamWriter logWriter = new StreamWriter($"{DateTime.Now.ToString("yyyyMMddHHmmssffff")}log.txt", true))
{
logBuilder.AppendLine($"\n\n There are {totalFilesNum} files in {dirFullName},get md5 file number:{fileMd5Num}");
logWriter.WriteLine(logBuilder.ToString());
}
} Console.ReadLine();
} static string GetFolderMD5(string dirFullName)
{
fileMd5Num = ;
totalFilesNum = ;
logBuilder = new StringBuilder();
Dictionary<string, string> folderMd5Dic = GetFolderFilesAndNameMD5Dic(dirFullName);
if (folderMd5Dic == null && folderMd5Dic.Any())
{
return null;
} using (MemoryStream ms = new MemoryStream())
{
using (MD5 folderDicMd5 = MD5.Create())
{
StringBuilder folderDicBuilder = new StringBuilder();
BinaryFormatter binFormatter = new BinaryFormatter();
binFormatter.Serialize(ms, folderMd5Dic);
byte[] folderDicMd5Bytes = folderDicMd5.ComputeHash(ms);
if(folderDicMd5Bytes!=null && folderDicMd5Bytes.Any())
{
for(int i=;i<folderDicMd5Bytes.Length;i++)
{
folderDicBuilder.Append(folderDicMd5Bytes[i].ToString("x2"));
}
}
return folderDicBuilder.ToString();
}
}
} static Dictionary<string,string> GetFolderFilesAndNameMD5Dic(string dirFullName)
{
if (!Directory.Exists(dirFullName))
{
return null;
} string[] allFilesInFolder = Directory.GetFiles(dirFullName, "*", SearchOption.AllDirectories);
totalFilesNum = allFilesInFolder.Count();
if (allFilesInFolder == null && !allFilesInFolder.Any())
{
return null;
} Dictionary<string, string> folderMd5CheckDic = new Dictionary<string, string>();
GetDirAllFilesMd5ToDic(allFilesInFolder, folderMd5CheckDic);
return folderMd5CheckDic;
} private static void GetDirAllFilesMd5ToDic(string[] allFilesInFolder, Dictionary<string, string> folderMd5CheckDic)
{
try
{
foreach (var file in allFilesInFolder)
{
string fileMd5 = GetSingleFileMD5(file);
string fileNameMd5 = GetFileNameMD5(file);
string dicKey = fileMd5 + fileNameMd5;
folderMd5CheckDic.Add(dicKey, file);
string msg = $"FileName:{file}, file md5:{fileMd5},num:{fileMd5Num++}";
Console.WriteLine(msg);
logBuilder.AppendLine(msg);
}
}
catch
{
}
} static string GetSingleFileMD5(string fileFullName)
{
if (!File.Exists(fileFullName))
{
return string.Empty;
}
StringBuilder md5Builder = new StringBuilder();
try
{
using (FileStream fs = File.Open(fileFullName, FileMode.Open))
{
using (MD5 md5 = MD5.Create())
{
byte[] md5Bytes = md5.ComputeHash(fs);
for (int i = ; i < md5Bytes.Length; i++)
{
md5Builder.Append(md5Bytes[i].ToString("x2"));
}
}
}
return md5Builder?.ToString();
}
catch
{
return string.Empty;
}
} static string GetFileNameMD5(string fileFullName)
{
if (!File.Exists(fileFullName) || string.IsNullOrEmpty(fileFullName))
{
return string.Empty;
}
StringBuilder fileNameMd5Builder = new StringBuilder();
try
{
byte[] fileNameBytes = Encoding.UTF8.GetBytes(fileFullName);
using (MD5 fileNameMd5 = MD5.Create())
{
byte[] fileNameMd5Bytes = fileNameMd5.ComputeHash(fileNameBytes);
for (int i = ; i < fileNameMd5Bytes.Length; i++)
{
fileNameMd5Builder.Append(fileNameMd5Bytes[i].ToString("x2"));
}
}
return fileNameMd5Builder?.ToString();
}
catch
{
return string.Empty;
}
}
}
}
C# get folder's Md5 generated by file's and filename's md5. get dictionary md5的更多相关文章
- An error occurred at line: 1 in the generated java file问题处理
tomcat6启动后,加载jsp页面报错,提示无法将jsp编译为class文件,主要报错信息如下: An error occurred at line: 1 in the generated java ...
- 报错:An error occurred at line: 22 in the generated java file The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 22 in ...
- python接口自动化测试二十七:密码MD5加密 ''' MD5加密 ''' # 由于MD5模块在python3中被移除 # 在python3中使用hashlib模块进行md5操作 import hashlib # 待加密信息 str = 'asdas89799,.//plrmf' # 创建md5对象 hl = hashlib.md5() # Tips # 此处必须声明encode # 若写法为
python接口自动化测试二十七:密码MD5加密 ''' MD5加密 '''# 由于MD5模块在python3中被移除# 在python3中使用hashlib模块进行md5操作import has ...
- C#生成MD5码
/// <summary> /// 获取文件的MD5码 /// </summary> /// <param name="fileName">传入 ...
- unity下载资源存储-生成md5
IEnumerator GetText() { using (UnityWebRequest request = UnityWebRequest.Get("localhost:80/txt/ ...
- C#获取文件的MD5码
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Send ...
- 获取文件的MD5码(C#)
using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Test ...
- 在.NET中计算文件的MD5值
更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 直接上代码吧: using System; using System.IO; using System.Security. ...
- 十八. Python基础(18)常用模块
十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...
随机推荐
- 震惊!线上四台机器同一时间全部 OOM,到底发生了什么?
案发现场 昨天晚上突然短信收到 APM (即 Application Performance Management 的简称),我们内部自己搭建了这样一套系统来对应用的性能.可靠性进行线上的监控和预警的 ...
- Ubuntu 18.04 LTS上安装NFS服务器和客户端
NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器.操作系统以及低层传送协议无关的存取远程文件的操作.RPC采用了XDR的支持.XDR是一种与机器无关的 ...
- 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- 配置基于全局地址池的DHCP
配置基于全局地址池的DHCP 配置基于全局地址池的DHCP服务器,从所有接口上的用户都可以选择该地址池中的地址,是个公共地址池. 实验 1.拓扑图 2.实验步骤 基本配置 开启DHCP功能 创建一个全 ...
- Pandas学习(二)——双色球开奖数据分析
学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学习(四)–数据的归一化 pandas学习(五)–pa ...
- cesium 结合 geoserver 实现地图属性查询(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- Coderfocers-551C
Professor GukiZ is concerned about making his way to school, because massive piles of boxes are bloc ...
- 初次在Vue项目使用TypeScript,需要做什么
前言 总所周知,Vue新版本3.0 使用 TypeScript 开发,让本来就很火的 TypeScript 受到更多人的关注.虽然 TypeScript 在近几年才火,但其实它诞生于2012年10月, ...
- 初探hook的键盘获取
初探hook的键盘获取 import pyHook import pythoncom class e(): keyIsPressed = False #键盘是否按下 按住.. def onKeyDow ...
- 【Go入门学习】理解区分数组和切片
一.前言 学过 Go 的都知道在 Go 语言中有四种复合数据类型:数组.切片(Slice).哈希表(Map)和结构体(Struct),而很多 Go 初学者也很容易把数组和切片弄混淆,所以要怎么把这两个 ...