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的更多相关文章

  1. 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 ...

  2. 报错: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 ...

  3. 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 ...

  4. C#生成MD5码

    /// <summary> /// 获取文件的MD5码 /// </summary> /// <param name="fileName">传入 ...

  5. unity下载资源存储-生成md5

    IEnumerator GetText() { using (UnityWebRequest request = UnityWebRequest.Get("localhost:80/txt/ ...

  6. C#获取文件的MD5码

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Send ...

  7. 获取文件的MD5码(C#)

    using System; using System.IO; using System.Security.Cryptography; using System.Text; namespace Test ...

  8. 在.NET中计算文件的MD5值

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月2日. 直接上代码吧: using System; using System.IO; using System.Security. ...

  9. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

随机推荐

  1. 【跟唐老师学习云网络】 - 第7篇 Tcpdump大杀器抓包

    [摘要] 前面章节的网络协议栈相关的信息建议大家多学习一遍,因为这些都是最基础的东西,想玩好云网络必备基本功.. 一.上帝视角 之前提到过定位问题可以开启上帝视角,那么如何开启就要依靠tcpdump这 ...

  2. Numpy的基础用法

    1.用Numpy创建数组 numpy.array(object):创建数组,与array.array(typecode[, initializer])不同,array.array()只能创建一维数组 ...

  3. 华为路由交换-DHCP

    DHCP 一. 配置基于接口地址池的DHCP 1.1实验原理 随着网络规模的扩大和网络复杂程度的提高,计算机位置变化(如便携机或无线网络)和计算机数量超过可分配的IP地址的情况将会经常出现.DHCP( ...

  4. 为什么说 Java 中只有值传递?

    对于初学者来说,要想把这个问题回答正确,是比较难的.在第二天整理答案的时候,我发现我竟然无法通过简单的语言把这个事情描述的很容易理解,遗憾的是,我也没有在网上找到哪篇文章可以把这个事情讲解的通俗易懂. ...

  5. Xcode编译引用Framework

    需要两步配置 1.在xcode工程的search path下设置要引用的Framework所在路径 2.将Framewoek拖入工程中时 不要选择copy,而选择引用模式.

  6. react-native IOS TextInput长按提示显示为中文(select | selectall -> 选择 | 全选)

    根据手机系统语言(简体中文/英文),提示不同的长按效果 长按提示效果图 英文长按提示 中文长按提示 解决 1.手机系统语言为简体中文: 设置->通用->语言与地区 2.ios/项目/inf ...

  7. mac查看开关机记录-last命令

    命令 last | grep reboot (查看开机时间记录) last | grep shutdown (查看关机时间记录) /var/log/messages日志中查询reboot(系统重启) ...

  8. ssh远程管理服务的介绍

    第6章 远程管理的介绍 6.1 服务的概念介绍 6.1.1 ssh和telnet服务的相同和不同点 ssh: 服务端口号为22 在数据传输的时候是加密的传输 一般在互联网中使用,可以使用root账号进 ...

  9. LSI系列芯片Raid卡配置方法、管理手册

    说明 本手册适用于LSI芯片Raid卡 包括但不限于Inspur 2008/2108 Raid卡.LSI 9240/9260/9261/ 9271 等Raid卡. 不同型号的Raid卡在某些功能上的支 ...

  10. Python中的input你真会吗?

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:一米阳光里的晴天娃娃   python中的input()方法是在控制台可 ...