- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 VBA 执行 FCIV 并获取文件的哈希值?
最佳答案
我见过的每个纯 VBA 实现都非常缓慢(有时每个文件超过一分钟)。可能有一种方法可以通过点击 Windows COM 库来做到这一点,但我目前不知道任何此类方法。 (我希望有人知道一个,你会在一秒钟内明白为什么:))我能想出的最好的方法是一个有点丑陋的解决方法,所以以下建议可能并不适用于所有情况,但有一个MS 提供的非常快速的命令行实用程序:http://support.microsoft.com/kb/841290 .该实用程序执行 MD5 和 SHA1。尽管该站点说它适用于 Windows XP,但我可以验证它适用于 Windows 7 及以上版本。不过,我还没有在 64 位上尝试过。
一些注意事项:
1. 此实用程序不受支持。我从来没有遇到过任何问题。但这仍然是一个考虑因素。
2. 该实用程序必须存在于您打算在其上运行代码的任何机器上,这可能并非在所有情况下都可行。
3. 显然,这有点像 hack/kludge,所以你可能想测试一下它是否有错误条件等。
4.我只是把它撞在一起。我还没有测试过它/使用过它。所以认真对待3:)
Option Explicit
Public Enum EHashType
MD5
SHA1
End Enum
''//Update this value to wherever you install FCIV:
Private Const mcstrFCIVPath As String = "C:\Windows\FCIV.exe"
Public Sub TestGetFileHash()
Dim strMyFilePath As String
Dim strMsg As String
strMyFilePath = Excel.Application.GetOpenFilename
If strMyFilePath <> "False" Then
strMsg = "MD5: " & GetFileHash(strMyFilePath, MD5)
strMsg = strMsg & vbNewLine & "SHA1: " & GetFileHash(strMyFilePath, SHA1)
MsgBox strMsg, vbInformation, "Hash of: " & strMyFilePath
End If
End Sub
Public Function GetFileHash(ByVal path As String, ByVal hashType As EHashType) As String
Dim strRtnVal As String
Dim strExec As String
Dim strTempPath As String
strTempPath = Environ$("TEMP") & "\" & CStr(CDbl(Now))
If LenB(Dir(strTempPath)) Then
Kill strTempPath
End If
strExec = Join(Array(Environ$("COMSPEC"), "/C", """" & mcstrFCIVPath, HashTypeToString(hashType), """" & path & """", "> " & strTempPath & """"))
Shell strExec, vbHide
Do
If LenB(Dir(strTempPath)) Then
strRtnVal = GetFileText(strTempPath)
End If
Loop Until LenB(strRtnVal)
strRtnVal = Split(Split(strRtnVal, vbNewLine)(3))(0)
GetFileHash = strRtnVal
End Function
Private Function HashTypeToString(ByVal hashType As String) As String
Dim strRtnVal As String
Select Case hashType
Case EHashType.MD5
strRtnVal = "-md5"
Case EHashType.SHA1
strRtnVal = "-sha1"
Case Else
Err.Raise vbObjectError, "HashTypeToString", "Unexpected Hash Type"
End Select
HashTypeToString = strRtnVal
End Function
Private Function GetFileText(ByVal filePath As String) As String
Dim strRtnVal As String
Dim lngFileNum As Long
lngFileNum = FreeFile
Open filePath For Binary Access Read As lngFileNum
strRtnVal = String$(LOF(lngFileNum), vbNullChar)
Get lngFileNum, , strRtnVal
Close lngFileNum
GetFileText = strRtnVal
End Function
关于file - 在 VBA 中获取 FCIV(或相同)校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3320954/
如何在 PHP 中生成 CRC-8 校验和? 最佳答案 function crcnifull ($dato, $byte) { static $PolyFull=0x8c; for ($i=0
我正在编写代码来使用 32 位无符号整数计算 CRC16。当尝试打印执行 CRC 操作的 XOR 函数的返回值时,它总是打印 0。我尝试了各种调试方法,例如打印语句,但是,我似乎无法弄清楚! 这是我的
ThinkPHP3.2.3验证码显示、刷新、校验 ,具体如下: 显示验证码 首先在Home/Controller下创建一个公共控制器PublicController
我想将自定义验证绑定(bind)到 TimePicker 自定义控件,但下面的代码显示“无法将内容添加到 TimePicker 的对象类型。”。
目录 Spring 校验(validator,JSR-303)实现 什么是JSR-303规范 与Spring MVC结合 实体类添加
导包和配置 导入 JSR 303 的包、hibernate valid 的包 ?
我是一名优秀的程序员,十分优秀!