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. NSSearchPathForDirectoriesInDomains用法

    iPhone会为每一个应用程序生成一个私有目录,这个目录位于: /Users/sundfsun2009/Library/Application Support/iPhone Simulator/Use ...

  2. IDEA 自定义代码块

    使用快捷键(ctrl+alt+s)找到:从idea的菜单File->Settings->Editor->Live Templates 先添加Template Group,然后添加Li ...

  3. Hadoop原生搭建

    版本:(centos7.6) 在开始搭建平台前我已经预装了MySQL ps:MySQL创建用户并授权: grant all privileges on *.* to ' with grant opti ...

  4. SpringBoot入门简介(一)

    1.SpringBoot简介 1.1 什么是Spring 随着动态语言的流行 (Ruby.Groovy.Scala.Node.js),Java 的开发显得格外的笨重:繁多的配置.低下的开发效率.复杂的 ...

  5. git 使用详解(5)—— get log 查看提交历史

    git log 查看 提交历史 在提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,可以使用 git log 命令查看. 接下来的例子会用我专门用于演示的 simplegit 项目,运行下面 ...

  6. Pandas学习(一)——数据的导入

    欢迎加入python学习交流群 667279387 学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学 ...

  7. Sring+mybatis模拟银行转账

    实体类: package com.bjsxt.pojo; import java.io.Serializable; public class Account implements Serializab ...

  8. Python发送邮件以及对其封装

    对Python发送邮件进行封装 Python发送邮件分为四步 连接到smtp服务器 登陆smtp服务器 准备邮件 发送邮件 导入所需要的包 import smtplib from email.mime ...

  9. 【Hybird】274-Hybird App 应用开发中 5 个必备知识点复习

    前言 我们大前端团队内部 ?每周一练 的知识复习计划还在继续,本周主题是 <Hybird APP 混合应用专题> ,这期内容比较多,篇幅也相对较长,每个知识点内容也比较多. 之前分享的每周 ...

  10. Java 从入门到进阶之路(十三)

    在之前的文章我们介绍了一下 Java 类的 private,static,final,本章我们来看一下 Java 中的抽象类和抽象方法. 我们先来看下面一段代码: // 根据周长求面积 class S ...