VBA计算文件内容的MD5哈希值

2024-02-08

我需要一个 VBA 例程来计算文件内容的 MD5 哈希值。我找到了一些例子(例如,here https://stackoverflow.com/questions/2826302/how-to-get-the-md5-hex-hash-for-a-file-using-vba)但我发现当文件名包含某些 Unicode 字符时它们会崩溃,所以我尝试调整代码以避免这种情况。

此代码不会导致错误,但也不会返回正确的 MD5 哈希值。怎么了?

Public Function FileToMD5Hex(sFileName As String) As String
    Dim enc
    Dim bytes
    Dim outstr As String
    Dim pos As Integer
    Set enc = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")
    'Convert the string to a byte array and hash it
    bytes = GetFileBytes(sFileName)
    bytes = enc.ComputeHash_2((bytes))
    'Convert the byte array to a hex string
    For pos = 1 To LenB(bytes)
        outstr = outstr & LCase(Right("0" & Hex(AscB(MidB(bytes, pos, 1))), 2))
    Next
    FileToMD5Hex = outstr
    Set enc = Nothing
End Function

Private Function GetFileBytes(path As String) As Byte()
    Dim fso As Object
    Set fso = CreateObject("scripting.FileSystemObject")

    Dim fil As Object
    Set fil = fso.GetFile(path)

'    Dim fpga As Variant
    GetFileBytes = fil.OpenAsTextStream().Read(fil.Size)

    Set fil = Nothing
    Set fso = Nothing
End Function

有一些字符序列Scripting.FileSystemObject无法正确处理TextStream.

Use ADODB.StreamActiveX 从文件中检索字节数组。它可以完美地处理文本和二进制类型的数据,还允许更改字符串的字符集(FSO仅适用于 ASCII 和 Unicode,并且仅适用于文件)。

Function GetFileBytes(strPath As String) As Byte()
    With CreateObject("ADODB.Stream")
        .Type = 1 ' adTypeBinary
        .Open
        .LoadFromFile (strPath)
        GetFileBytes = .Read()
    End With
End Function

另一种处理二进制数据的 ActiveX 是SAPI.spFileStream。最重要的优点之一 - 它允许仅将文件的一部分加载到内存(在某些情况下,当比较大文件时,它可以帮助大幅提高性能,按块检查 md5)。

Function GetFileBytes(strPath As String) As Byte()
    Dim arrContent As Variant
    With CreateObject("SAPI.spFileStream")
        .Open strPath, 0
        .Read arrContent, CreateObject("Scripting.FileSystemObject").GetFile(strPath).Size
        .Close
    End With
    GetFileBytes = arrContent
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VBA计算文件内容的MD5哈希值 的相关文章

  • 强制刷新工作表的“最后一个”单元格

    Pressing Ctrl End in Excel takes you to the bottom right most cell of the worksheet 如果删除最后的行或列并保存工作簿 最后一个单元格以及滚动条都会更新 我记
  • 从VBA中的数组批量插入到sql中

    我正在尝试在 Excel 中构建一个按钮 将所选区域上传到 SQL Server 中的表中 第一行将自动视为列标题 这件事该怎么继续下去呢 我想要的是简单和超快的上传 这是我的想法 我将选择选定的区域 然后将其保存为 txt 文件 然后对其
  • VBA 中的求和函数

    我在 vba 中对单元格求和时遇到问题 我需要使用单元格 a b Range A1 function SUM Range Cells 2 1 Cells 3 2 但它不起作用 函数不是范围内的属性 方法 如果您想对值求和 请使用以下命令 R
  • 为什么我从 c# 到 js 得到不同的 MD5 哈希值?

    我有一个用于加密密码的 C 函数 System Security Cryptography MD5CryptoServiceProvider md5Provider new System Security Cryptography MD5C
  • MS access:如何嵌入JPEG图像并预览它们?

    我用的是Access 2007 我创建了一个 OLE 字段来存储 JPEG 因此我可以轻松地将它们拖到数据库中 这样可行 问题是 该字段不显示 JPEG 而是显示通用 JPEG 缩略图我需要双击打开 JPEG 并预览它 有办法吗预览 JPE
  • Excel,循环遍历 XLSM 文件并将行复制到另一个工作表

    我现在遇到的此代码的主要问题是处理我打开的 xlsm 文件的错误 我对这些文件的 VB 代码没有编辑权限 如果 vb 出错 有没有办法跳过文件 我有一个包含大约 99 个 xlsm 文件的文件夹 我希望循环遍历每个文件并复制每个工作簿中的第
  • VB FFT - 难以理解结果与频率的关系

    试图理解我正在使用的 fft 快速傅里叶变换 例程 窃取 回收 输入是 512 个数据点的数组 它们是样本波形 测试数据生成到该数组中 fft 将该数组变换到频域 尝试理解频率 周期 采样率和 fft 数组中位置之间的关系 我用例子来说明
  • 规范化现有的 MS Access 数据库

    我有一个大型访问数据库 需要将其规范化为五个表和一个查找表 我了解标准化背后的理论 并且已经勾勒出表格的外观 但我不知道如何转换我的表格以使数据库标准化 表分析器没有提供我想要的细分 如果您只有一个表 请向其中添加自动编号字段 然后创建其他
  • 如何确保我的 IE 选项卡名称正确?

    我使用此代码从 Word VBA 获取 Internet Explorer 的实例 并从网页中抓取一些值 我循环遍历 4 个项目 以防万一 有时我不小心抓住了一个名为 Windows Explorer 的东西 我不知道那是什么 来抓住 In
  • 滞后分区相当于 MS Access

    我正在寻找 MS Access 中以下 Oracle 查询的等效项 我知道 Lag Over Partition by 功能在 MS Access 中不可用 但希望使用 MS Access 实现以下查询的相同功能 感谢任何输入 select
  • 检查工作表是否存在,如果不存在则创建-VBA [重复]

    这个问题在这里已经有答案了 我已经测试了许多代码 这些代码检查工作表是否存在 基于名称 如果不存在则创建一个 其中一些循环所有工作表 一些引用工作表 如果创建错误则意味着该工作表不存在 哪一种是最合适的 正统的 更快的方式来完成这个任务 目
  • 如何从特定类获取特定链接?

    我想提取这个href从那个特定的class tr class even td a href italy serie a 2015 2016 Serie A 2015 2016 a td 这是我写的 Sub ExtractHrefClass
  • 宏VBA获取Outlook 2003中选定的文本

    我正在尝试使用此代码片段来获取 Outlook 2003 中选定的文本 Sub SelectedTextDispaly On Error Resume Next Err Clear Dim oText As TextRange Get an
  • Access 2013 SQL 中的转换和透视

    如何使用 TRANSFORM 和 PIVOT 函数从第一个表获取第二个表 TABLE 01 Config ID ConfigField ConfigValue 11 Name Basic 11 Version 1 01 11 Owner J
  • 当第二个工作表中存在值时删除整行

    我有 2 张纸 sheet1 和sheet2 我在单元格 A3 sheet1 中有一个值 该值不是恒定的 Sheets2 中还有许多文件 我想做的是 当单元格 A3 Sheet1 中的值与 A 列 Sheet2 中的值相同时 它将删除找到该
  • 将 VBA 字符串转换为双精度

    我正在使用非常基本的 VBA for word 编码来创建一个模板 该模板可以从 Windows 中的其他屏幕中提取数据 当它提取数字时 它们被格式化为字符串 我现在需要将字符串转换为双精度 以便对它们进行加 减 我一直在尝试一切 但似乎无
  • 保护 Excel VBA 代码的最佳方法? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经整理了一个简单的 Excel 数据库 该数据库执行一些宏函数 并且我需要将此数据库分发给几个人 但他们无法看到宏函数实际上是如何
  • 如何创建动态变量名VBA

    我正在尝试根据单元格中的值在 VBA 中创建动态数量的变量 本质上我想要的结果是这样的Team1 Team2 to TeamX 任何帮助是极大的赞赏 Dim i x As Integer Set x Range J4 Value Dim T
  • Excel VBA 通过简单除法引发溢出错误

    Excel 2013 VBA 这段代码 Sub test On Error GoTo Err Dim p As Double p 362 100 2005 Exit Sub Err If Err Description lt gt And
  • ATL创建的COM接口继承IDispatch但后期绑定不起作用

    这是我的 IDL 文件 IFrame 是一个双接口 同时继承了 IDispatch 和 IUnknown object uuid C5AD0517 37FC 479C 9C7A A063B17E4A2E dual nonextensible

随机推荐

  • 你好,是否可以在 Eclipse 下禁用/不显示向导

    是否可以在 Eclipse 下禁用 不显示向导 例如 文件 gt 新建 gt 向导名称同样的方法 文件 gt 新建 gt 其他 gt 选择向导 gt 向导类别名称 gt 向导名称 我可以通过 propertyTesters 使向导不显示在
  • 指南针(红宝石)编码错误

    我在 Ubuntu Oneiric 上安装了 Compass 0 12 一个 ruby gem 没有任何问题 我已经更新为精确格式化 并保留 home 所以我需要重新安装 ruby 1 9 3 现在 当我编译 SCSS 文件时 出现此错误
  • 如何创建 MSI 设置?

    多年来我一直使用 Inno Setup 为所有 Delphi 工具创建设置 现在 一些用户更想要 MSI 安装包 这样他们就可以将安装程序从中央服务器部署到所有工作站 我如何创建一个 我必须购买 Visual Studio 或其他产品吗 您
  • QTP:如何从函数返回多个值

    我正在尝试编写一个函数 它可以从具有 2 个参数的函数返回多个值 eg function sample function arg1 arg2 Some code passenger list1 0 name1 list1 1 age1 li
  • Mac X11 有 XTEST 扩展吗?

    所以我把一些 X 程序移到了 mac 上 然后我得到了 Error XTEST extension unavailable on null 来自 xdotool OS X X11 是否附带 XTEST 如果没有的话有办法添加吗 在终端中运行
  • WiX 自定义许可证文件:安装程序显示带有 < > 的链接

    我创建了一个带有自定义许可证文件的 WiX 3 5 设置 将其放入 wxs file
  • 无法安装 Facebook 6.4.2 软件包

    我正在尝试安装 facebook C sdkNuGet 控制台进入我的视窗电话 8 app NET框架4 0但它给出了一个错误 详细信息如下 PM gt Install Package Facebook Successfully insta
  • 从 itertools.cycle 中提取列表

    我有一堂课 其中包含itertools cycle我希望能够复制的实例 一种方法 我能想到的唯一方法 是提取初始可迭代对象 这是一个列表 并存储循环所在的位置 不幸的是 我无法获取用于创建循环实例的列表 似乎也没有明显的方法来做到这一点 i
  • 使用 Encode::encode 和“utf8”

    正如您可能知道的 在 Perl 中 utf8 意味着 Perl 对 UTF 8 的宽松理解 它允许在技术上不是 UTF 8 中有效代码点的字符 相比之下 UTF 8 或 utf 8 是 Perl 对 UTF 8 更严格的理解 它不允许无效的
  • 一条 SQL 语句中存在多个 WHERE 条件

    我无法使用很多WHERE条件 因为我确实需要结合8 Where单个语句中的条件 我当前的SQL SELECT FROM Table WHERE ID I want 某物像这样 SELECT FROM Table WHERE ID WHERE
  • 同时更新两个表的条​​件 SQL 语句

    我想一次更新两个表 下面的代码似乎工作正常 但是 在某些情况下 bidGroups 中没有条目 这意味着整个语句将失败 我怎样才能调整它 以便它更新第一位 watchedItems 并且如果watchedItems bidGroupID I
  • 错误:xcode-select:错误:工具“xcodebuild”需要 Xcode

    我在用Ionic 2 该应用程序构建了一个Androidapk在 Windows 上成功 我现在正在尝试构建它iOS在 OSX 上 当我跑步时 ionic build ios 我得到以下信息 任何建议表示赞赏 你需要配置xcode安装后 打
  • WCF REST 缓存 - 客户端和服务器端

    我写了一个 RESTful WCF 服务 合并 ETag 使标头过期 从浏览器使用它时 缓存效果很好 但是 当从 WCF 通道工厂或 NET Web 请求对象调用缓存时 缓存是如何工作的呢 因此 在我的网站在返回 304 未修改响应时调用
  • 之间有什么区别?

    当我使用
  • 使用 mongoimport 导入超过 1 个 json 文件

    我是新来的mongodb并想了解如何导入json文件从一台服务器传输到另一台服务器 我尝试了以下命令mongoimport d test c bik check json它对我来说效果很好 现在我想知道什么时候有多个json我如何一次性导入
  • 页面加载时 Twitter 引导程序进度条动画

    我有一个带有几个引导进度条的页面 最初设置它们的值效果很好 虽然我希望进度条在用户打开页面时动画 转换到其特定状态 当你点击其中一个栏时 这个 JS 工作正常 我在酒吧的 onload 事件中需要类似的东西 但 onload 事件不适用于
  • 无法让社交媒体共享按钮在内联列表中排列

    在我的一生中 我无法让这些社交媒体分享按钮与我的内嵌列表对齐 我差点就拥有了它vertical align top on the li 但 Chrome 不喜欢这样 页面可以在这里看到 http 206 72 114 49 sharelin
  • 在缓存中找不到元素 - 也许页面自从在 Selenium Ruby Web 驱动程序中查找后已发生更改?

    我正在尝试编写一个爬虫 它可以从加载的页面中爬取所有链接 并在某个文件 例如 XML 或 txt 中记录所有请求和响应标头以及响应正文 我正在新浏览器窗口中打开第一个加载页面的所有链接 因此不会出现此错误 Element not found
  • 嵌入共享库的绝对路径

    使用供应商提供的交叉编译工具链 显然是 OpenEmbedded 衍生品 我无法嵌入第三方 开源 内部编译 库的绝对路径 使用以下 gcc 命令行 arm linux gcc test connect send o gprs connect
  • VBA计算文件内容的MD5哈希值

    我需要一个 VBA 例程来计算文件内容的 MD5 哈希值 我找到了一些例子 例如 here https stackoverflow com questions 2826302 how to get the md5 hex hash for