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. 震惊!线上四台机器同一时间全部 OOM,到底发生了什么?

    案发现场 昨天晚上突然短信收到 APM (即 Application Performance Management 的简称),我们内部自己搭建了这样一套系统来对应用的性能.可靠性进行线上的监控和预警的 ...

  2. Ubuntu 18.04 LTS上安装NFS服务器和客户端

    NFS是基于UDP/IP协议的应用,其实现主要是采用远程过程调用RPC机制,RPC提供了一组与机器.操作系统以及低层传送协议无关的存取远程文件的操作.RPC采用了XDR的支持.XDR是一种与机器无关的 ...

  3. 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  4. 配置基于全局地址池的DHCP

    配置基于全局地址池的DHCP 配置基于全局地址池的DHCP服务器,从所有接口上的用户都可以选择该地址池中的地址,是个公共地址池. 实验 1.拓扑图 2.实验步骤 基本配置 开启DHCP功能 创建一个全 ...

  5. Pandas学习(二)——双色球开奖数据分析

    学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学习(四)–数据的归一化 pandas学习(五)–pa ...

  6. cesium 结合 geoserver 实现地图属性查询(附源码下载)

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...

  7. Coderfocers-551C

    Professor GukiZ is concerned about making his way to school, because massive piles of boxes are bloc ...

  8. 初次在Vue项目使用TypeScript,需要做什么

    前言 总所周知,Vue新版本3.0 使用 TypeScript 开发,让本来就很火的 TypeScript 受到更多人的关注.虽然 TypeScript 在近几年才火,但其实它诞生于2012年10月, ...

  9. 初探hook的键盘获取

    初探hook的键盘获取 import pyHook import pythoncom class e(): keyIsPressed = False #键盘是否按下 按住.. def onKeyDow ...

  10. 【Go入门学习】理解区分数组和切片

    一.前言 学过 Go 的都知道在 Go 语言中有四种复合数据类型:数组.切片(Slice).哈希表(Map)和结构体(Struct),而很多 Go 初学者也很容易把数组和切片弄混淆,所以要怎么把这两个 ...