通过.NET中的默认类实现,但是采用不同类,针对不同的情况:

具体如下:

类:

/// <summary>/// 文件MD5操作类/// </summary>public class MD5Checker{/// <summary>/// 通过MD5CryptoServiceProvider类中的ComputeHash方法直接传入一个FileStream类实现计算MD5/// 操作简单,代码少,调用即可/// </summary>/// <param name="path">文件地址</param>/// <returns>MD5Hash</returns>public static string getMD5ByMD5CryptoService(string path){if (!File.Exists(path))throw new ArgumentException(string.Format("<{0}>, 不存在", path));FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);MD5CryptoServiceProvider md5Provider = new MD5CryptoServiceProvider();byte[] buffer = md5Provider.ComputeHash(fs);string resule = BitConverter.ToString(buffer);resule = resule.Replace("-", "");md5Provider.Clear();fs.Close();return resule;}/// <summary>/// 通过HashAlgorithm的TransformBlock方法对流进行叠加运算获得MD5/// 实现稍微复杂,但可使用与传输文件或接收文件时同步计算MD5值/// 可自定义缓冲区大小,计算速度较快/// </summary>/// <param name="path">文件地址</param>/// <returns>MD5Hash</returns>public static string getMD5ByHashAlgorithm(string path){if (!File.Exists(path))throw new ArgumentException(string.Format("<{0}>, 不存在", path));int bufferSize = 1024 * 16;//自定义缓冲区大小16Kbyte[] buffer = new byte[bufferSize];Stream inputStream = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);HashAlgorithm hashAlgorithm = new MD5CryptoServiceProvider();int readLength = 0;//每次读取长度var output = new byte[bufferSize];while ((readLength = inputStream.Read(buffer, 0, buffer.Length)) > 0){//计算MD5hashAlgorithm.TransformBlock(buffer, 0, readLength, output, 0);}//完成最后计算,必须调用(由于上一部循环已经完成所有运算,所以调用此方法时后面的两个参数都为0)hashAlgorithm.TransformFinalBlock(buffer, 0, 0);string md5 = BitConverter.ToString(hashAlgorithm.Hash);            hashAlgorithm.Clear();inputStream.Close();md5 = md5.Replace("-", "");return md5;}}

测试:

static void Main(string[] args){Console.WriteLine("第一种方式:");Console.WriteLine(DateTime.Now.Ticks);Console.WriteLine(DateTime.Now.ToString());Console.WriteLine(MD5Checker.getMD5ByMD5CryptoService(@"D:\ShareFiles\Softwares\Office2013.zip"));Console.WriteLine(DateTime.Now.Ticks);Console.WriteLine(DateTime.Now.ToString());Console.WriteLine("第二种方式:");Console.WriteLine(DateTime.Now.Ticks);Console.WriteLine(DateTime.Now.ToString());Console.WriteLine(MD5Checker.getMD5ByHashAlgorithm(@"D:\ShareFiles\Softwares\Office2013.zip"));Console.WriteLine(DateTime.Now.Ticks);Console.WriteLine(DateTime.Now.ToString());Console.ReadKey();}

结果:

转载请注明出处!!

[C#] 计算大文件的MD5的两种方式(直接调用方法计算,流计算-适用于大文件)相关推荐

  1. 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...

  2. python实现selenium文件上传的两种方式

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径. 方法二.非input标签上传 这种上传方式需要借助第三方工具,主要有以下三种情 ...

  3. 用CSV文件读写数据的两种方式(转)

    导读:有时候我们需要对收集的数据做统计,并在页面提供显示以及下载.除了对传统的excel存取之外,对CSV文件的存取也很重要.本文列出了这两种操作的详细代码. 代码: <?php $file = ...

  4. android文件追加,Android 写文件 复写和追加 两种方式

    /** * 此方法为android程序写入sd文件文件,用到了android-annotation的支持库@ * * @param buffer 写入文件的内容 * @param folder 保存文 ...

  5. Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  6. Java计算两点间经纬度距离(两种方式)

    反余弦计算方式: private static final double EARTH_RADIUS = 6371000; // 平均半径,单位:m:不是赤道半径.赤道为6378左右 public st ...

  7. vue前端上传文件给后端的两种方式

    <a-uploadv-model:file-list="fileList":show-upload-list="false":multiple=" ...

  8. java 文件压缩zip【两种方式】

    一.普通方式 package com.hebta.source.code.util;import java.io.*; import java.util.zip.ZipEntry; import ja ...

  9. Java生成MD5的两种方式

    1 原生的 package com.pibigstar.common.utils;import java.security.MessageDigest;/*** MD5加密工具类* @author p ...

  10. 经纬度计算距离公式 java_Java计算两点间经纬度距离(两种方式)

    反余弦计算方式: private static final double EARTH_RADIUS = 6371000; // 平均半径,单位:m:不是赤道半径.赤道为6378左右 public st ...

最新文章

  1. 【微信小程序】根据当前运行环境调用不同的接口地址的一些方法
  2. 都已经十岁的 Apache Dubbo,还能再乘风破浪吗?
  3. Python的小特别
  4. BZOJ 2097 [Usaco2010 Dec]Exercise 奶牛健美操
  5. CSS清除默认样式,成功入职腾讯
  6. redis缓存雪崩,缓存穿透,缓存击穿的解决方法
  7. 实现一维卷积神经网络
  8. c语言设计题库及详解答案,c语言程序设计题库及其答案
  9. java debug命令详解_DEBUG命令使用解析及范例大全
  10. w10如何共享计算机硬盘,Win10如何设置局域网磁盘共享?操作方法分享
  11. GBASE应用 | “天擎”出鞘 GBase 8a助力气象行业进入大数据时代
  12. python任务栏都隐藏了_如何隐藏PyQt4 Python应用程序的任务栏图标?
  13. JavaCV开发详解之1:调用本机摄像头并预览摄像头图像画面视频(建议使用javaCV最新版本)
  14. 微信开发获取签名wx.config
  15. 计算机网络复习-典型题目答案
  16. 安装主机及服务器系统
  17. 2020年黄历表_老黄历2020黄道吉日一览表-万年历老黄历2020年黄道吉日查询【蜜匠婚礼】...
  18. 2022-05-18 牛客网每日选择题--前端
  19. 基于java的springboot疫情下社区健康评估系统毕业设计springboot开题报告
  20. 最长不重复子串(java)

热门文章

  1. Fuzzing技术分析
  2. mysql的数据库的索引_MySql数据库索引原理
  3. java的package需要大写吗,java 数字转大写的小程序
  4. django优化--ORM优缺点
  5. ref:LDAP入门
  6. 《黑客与画家》 读书笔记
  7. JAVA 如何将String进行大小写转换
  8. 1052. Linked List Sorting (25)再
  9. 【转】boost 内存池
  10. 【Spring-AOP】底层类ProxyConfig,ProxyProcessorSupport分析